日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
詳解LNMP的資源分配和并發(fā)配置

Linux+Nginx+Mysql/MariaDB+Perl/PHP/Python一組常用來(lái)搭建動(dòng)態(tài)網(wǎng)站或者服務(wù)器的開(kāi)源軟件,本身都是各自獨(dú)立的程序,但是因?yàn)槌1环旁谝黄鹗褂?,擁有了越?lái)越高的兼容度,共同組成了一個(gè)強(qiáng)大的Web應(yīng)用程序平臺(tái)。

10年積累的做網(wǎng)站、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有德保免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

LNMP中的N是nginx充當(dāng)Web Server

內(nèi)容的分發(fā)者,會(huì)在文件系統(tǒng)找到相應(yīng)的文件,就返回給瀏覽器,如:nginx。如果是靜態(tài)的文件,就可以直接返回,但是如果是index.php需要解析并執(zhí)行的腳本文件時(shí),Web Server就無(wú)力了,需要將請(qǐng)求轉(zhuǎn)發(fā)給相應(yīng)的腳本語(yǔ)言的解析器來(lái)解釋并執(zhí)行,最終將程序的執(zhí)行結(jié)果,返回給Web Server,再返回給瀏覽器。

LNMP中的P是php充當(dāng)后端的邏輯處理程序

那么php與nginx的常規(guī)協(xié)作方式是如何的呢?需要我們明確幾個(gè)概念

cgi

通用網(wǎng)關(guān)接口,是HTTP協(xié)議中描述的,Web Server與后端處理程序進(jìn)程間通信的協(xié)議

php-cgi

php實(shí)現(xiàn)了cgi協(xié)議,使得web server與php共同完成一個(gè)動(dòng)態(tài)網(wǎng)頁(yè)的請(qǐng)求響應(yīng)

fastcgi

是為了解決cgi性能問(wèn)題,而規(guī)范的另外一種協(xié)議,為什么說(shuō)解決cgi性能問(wèn)題,因?yàn)樵诿鎸?duì)各大中型網(wǎng)站的業(yè)務(wù)需求中,cgi程序表現(xiàn)得越來(lái)越無(wú)力,因?yàn)閏gi程序在每次接收到請(qǐng)求時(shí)都需要啟動(dòng)新的進(jìn)程,并初始化環(huán)境,然后執(zhí)行程序,具體的協(xié)議內(nèi)容,在此不引述。

php-fpm

實(shí)現(xiàn)了fastcgi協(xié)議,是php-cgi的進(jìn)程管理器,解決高并發(fā)網(wǎng)站的性能問(wèn)題。

在最終回答LNMP的并發(fā)考慮與資源分配還需要明確的幾個(gè)概念

并發(fā)

一般由單位內(nèi)完成的請(qǐng)求數(shù)來(lái)衡量,如,每秒事務(wù)數(shù)(TPS),每秒HTTP請(qǐng)求數(shù)(HPS),每秒查詢數(shù)(QPS)。通常情況下,我們說(shuō)PHP的并發(fā),都是指一秒內(nèi)PHP完成的動(dòng)態(tài)請(qǐng)求的次數(shù)。如某網(wǎng)站高峰期的動(dòng)態(tài)請(qǐng)求并發(fā)為5000每秒,這個(gè)數(shù)字不算太高,但也不低。一般日活躍用戶數(shù)在1000萬(wàn)-5000萬(wàn)的網(wǎng)站應(yīng)用才能達(dá)到這個(gè)級(jí)別。

性能

一般是指應(yīng)用程序的處理速度,如果php的應(yīng)用程序,打開(kāi)一個(gè)頁(yè)面(執(zhí)行一個(gè)腳本程序)通常需要在50-100ms完成,這對(duì)程序的性能要求還是比較高的。但是這還僅僅只是程序處理,php處理完成之后,還要交給web server,web server再將數(shù)據(jù)返回瀏覽器,這中間會(huì)有一個(gè)網(wǎng)絡(luò)延遲,通常網(wǎng)絡(luò)正常的情況下,需要大約100ms,最終一個(gè)動(dòng)態(tài)網(wǎng)頁(yè)的請(qǐng)求大約200ms(理想的情況下)可以到達(dá)用戶瀏覽器端(僅僅是一個(gè)html結(jié)構(gòu))。

資源分配

php-fpm進(jìn)程數(shù)

按照上面的描述,并發(fā)為5000每秒,每個(gè)請(qǐng)求完成大約200ms(具體頁(yè)面要具體分析,這里只是一個(gè)理想值),如果只有5臺(tái)PHP應(yīng)用程序服務(wù)器,那么每臺(tái)機(jī)器平均為并發(fā)1000每秒,如果是使用nginx+php-fpm的架構(gòu),php-fpm的php-cgi進(jìn)程管理器的配置應(yīng)該如何呢?我計(jì)算的結(jié)果為(具體的配置項(xiàng)說(shuō)明在后文): pm=static pm.max_children=100 上面的100是如何得來(lái)的,由于機(jī)器平均并發(fā)為1000每秒,每個(gè)動(dòng)態(tài)請(qǐng)求的處理時(shí)間為100ms,也就是說(shuō)1個(gè)php-fpm的worker處理進(jìn)程在1秒內(nèi)可以處理10個(gè)請(qǐng)求,100個(gè)php-fpm的worker處理進(jìn)程,就可以處理1000個(gè)請(qǐng)求。 當(dāng)然需要結(jié)合服務(wù)器硬件資源來(lái)進(jìn)行配置,如果配置不當(dāng),很容易在請(qǐng)求高峰期或者流量猛增導(dǎo)致服務(wù)器宕機(jī)。

網(wǎng)絡(luò)帶寬

網(wǎng)絡(luò)帶寬也會(huì)是一個(gè)重要的因素,如果你的服務(wù)處理很強(qiáng),但是用戶的請(qǐng)求和響應(yīng)不能及時(shí)到達(dá)也是白忙活,這個(gè)參數(shù)如何計(jì)算呢? 并發(fā)5000每秒,每個(gè)請(qǐng)求的輸出為20K,則5000x20K=100000K=100M 這就要求你的公網(wǎng)負(fù)載均衡器外網(wǎng)帶寬至少要達(dá)到100M

內(nèi)存

上述中100個(gè)php-fpm的worker處理進(jìn)程,理論上如果服務(wù)器只運(yùn)行php-fpm,那么我們可以將服務(wù)器內(nèi)存的一半分配給php-fpm,通常情況下,我們可以認(rèn)為一個(gè)php-fpm的worker處理進(jìn)程占用內(nèi)存20M,那么100x20M=2G,也就是說(shuō)明服務(wù)器的內(nèi)存大約為4G

CPU

由于php-fpm是一個(gè)多進(jìn)程的模型應(yīng)用,CPU進(jìn)程調(diào)度消耗也是很大的,并且PHP應(yīng)用程序有問(wèn)題也會(huì)導(dǎo)致CPU占用率高,這就沒(méi)有量化的指標(biāo),需要具體情況具體分析了。但是有一個(gè)小建議,可以部署一個(gè)crontab每隔一分鐘檢測(cè)cpu占用率超過(guò)多少就kill掉相應(yīng)的php-fpm的worker處理進(jìn)程。

nginx與php-fpm使用unix域套接字代替tcp socke進(jìn)行通信

這個(gè)配置挺關(guān)鍵的,純echo的ab測(cè)試,采用unix域套接字每秒請(qǐng)求數(shù)提升10%-20% 即nginx中配置:

   fastcgi_pass unix:/data/server/var/php/php-fpm.sock;
   php-fpm.conf中配置:
   listen = /data/server/var/php/php-fpm.sock

最后遇到很多同學(xué)對(duì)php-fpm的進(jìn)程管理器的核心配置不太了解,下面是我翻譯的配置說(shuō)明:

首先php-fpm相關(guān)的配置項(xiàng)有

進(jìn)程管理器以控制子進(jìn)程的數(shù)量,可能的值有
static 一個(gè)固定的值,由pm.max_children指定
dynamic 動(dòng)態(tài)的(工作方式和Apache的prefork模式一致),但是保持至少一個(gè),由
pm.max_children 在同一時(shí)間最大的進(jìn)程數(shù)
pm.start_servers php-fpm啟動(dòng)時(shí)開(kāi)啟的等待請(qǐng)求到來(lái)的進(jìn)程數(shù)
pm.min_spare_servers 在空閑狀態(tài)下,運(yùn)行的最小進(jìn)程數(shù),如果小于此值,會(huì)創(chuàng)建新的進(jìn)程
pm.max_spare_servers 在空閑狀態(tài)下,運(yùn)行的最大進(jìn)程數(shù),如果大于此值,會(huì)kill部分進(jìn)程
ondemand 啟動(dòng)時(shí)不會(huì)創(chuàng)建進(jìn)程,當(dāng)請(qǐng)求達(dá)到時(shí)創(chuàng)建子進(jìn)程處理請(qǐng)求
pm.max_children 在同一時(shí)間最大的進(jìn)程數(shù)
pm.process_idle_timeout 空閑多少秒之后進(jìn)程會(huì)被kill
pm = dynamic

   pm.max_children

在同一時(shí)間最大的進(jìn)程數(shù)
pm.max_children = 120

   pm.start_servers

php-fpm啟動(dòng)時(shí)開(kāi)啟的等待請(qǐng)求到來(lái)的進(jìn)程數(shù),默認(rèn)值為:min_spare_servers + (max_spare_servers – min_spare_servers) / 2
pm.start_servers = 80

   pm.min_spare_servers

在空閑狀態(tài)下,運(yùn)行的最小進(jìn)程數(shù),如果小于此值,會(huì)創(chuàng)建新的進(jìn)程
pm.min_spare_servers = 60

   pm.max_spare_servers

在空閑狀態(tài)下,運(yùn)行的最大進(jìn)程數(shù),如果大于此值,會(huì)kill部分進(jìn)程
pm.max_spare_servers = 120

   pm.process_idle_timeout

空閑多少秒之后進(jìn)程會(huì)被kill,默認(rèn)為10s
pm.process_idle_timeout = 10s

   pm.max_requests

每個(gè)進(jìn)程處理多少個(gè)請(qǐng)求之后自動(dòng)終止,可以有效防止內(nèi)存溢出,如果為0則不會(huì)自動(dòng)終止,默認(rèn)為0
pm.max_requests = 5000

   pm.status_path

注冊(cè)的URI,以展示php-fpm狀態(tài)的統(tǒng)計(jì)信息
pm.status_path = /status
其中統(tǒng)計(jì)頁(yè)面信息有:
pool 進(jìn)程池名稱
process manager 進(jìn)程管理器名稱(static, dynamic or ondemand)
start time php-fpm啟動(dòng)時(shí)間
start since php-fpm啟動(dòng)的總秒數(shù)
accepted conn 當(dāng)前進(jìn)程池接收的請(qǐng)求數(shù)
listen queue 等待隊(duì)列的請(qǐng)求數(shù)
max listen queue 自啟動(dòng)以來(lái)等待隊(duì)列中最大的請(qǐng)求數(shù)
listen queue len 等待連接socket隊(duì)列大小
idle processes 當(dāng)前空閑的進(jìn)程數(shù)
active processes 活動(dòng)的進(jìn)程數(shù)
total processes 總共的進(jìn)程數(shù)(idle+active)
max active processes 自啟動(dòng)以來(lái)活動(dòng)的進(jìn)程數(shù)最大值
max children reached 達(dá)到最大進(jìn)程數(shù)的次數(shù)

   ping.path

ping url,可以用來(lái)測(cè)試php-fpm是否存活并可以響應(yīng)
ping.path = /ping

   ping.response

ping url的響應(yīng)正文
ping.response = pong

本文名稱:詳解LNMP的資源分配和并發(fā)配置
瀏覽路徑:http://www.5511xx.com/article/djgsgie.html