国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > PHP > 正文

PHP-FPM運(yùn)行原理以及相關(guān)配置

2019-11-06 07:02:33
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

php-FPM運(yùn)行原理以及相關(guān)配置 一.PHP-FPM運(yùn)行原理 CGI 是 Web Server 與后臺(tái)語(yǔ)言交互的協(xié)議,有了這個(gè)協(xié)議,開(kāi)發(fā)者可以使用任何語(yǔ)言處理 Web Server 發(fā)來(lái)的請(qǐng)求,動(dòng)態(tài)的生成內(nèi)容。但 CGI 有一個(gè)致命的缺點(diǎn),那就是每處理一個(gè)請(qǐng)求都需要 fork 一個(gè)全新的進(jìn)程,隨著 Web 的興起,高并發(fā)越來(lái)越成為常態(tài),這樣低效的方式明顯不能滿足需求。就這樣,F(xiàn)astCGI 誕生了,CGI 很快就退出了歷史的舞臺(tái)。FastCGI,顧名思義為更快的 CGI,它允許在一個(gè)進(jìn)程內(nèi)處理多個(gè)請(qǐng)求,而不是一個(gè)請(qǐng)求處理完畢就直接結(jié)束進(jìn)程,性能上有了很大的提高 至于 FPM (FastCGI PRocess Manager),它是 FastCGI 的實(shí)現(xiàn),任何實(shí)現(xiàn)了 FastCGI 協(xié)議的 Web Server 都能夠與之通信。FPM 之于標(biāo)準(zhǔn)的 FastCGI,也提供了一些增強(qiáng)功能,具體可以參考官方文檔:PHP: FPM Installation。 FPM 是一個(gè) PHP 進(jìn)程管理器,包含 master 進(jìn)程和 worker 進(jìn)程兩種進(jìn)程:master 進(jìn)程只有一個(gè),負(fù)責(zé)監(jiān)聽(tīng)端口,接收來(lái)自 Web Server 的請(qǐng)求,而 worker 進(jìn)程則一般有多個(gè) (具體數(shù)量根據(jù)實(shí)際需要配置),每個(gè)進(jìn)程內(nèi)部都嵌入了一個(gè) PHP 解釋器,是 PHP 代碼真正執(zhí)行的地方 從 FPM 接收到請(qǐng)求,到處理完畢,其具體的流程如下:

FPM 的 master 進(jìn)程接收到請(qǐng)求 master 進(jìn)程根據(jù)配置指派特定的 worker 進(jìn)程進(jìn)行請(qǐng)求處理,如果沒(méi)有可用進(jìn)程,返回錯(cuò)誤,這也是我們配合 Nginx 遇到502錯(cuò)誤比較多的原因。 worker 進(jìn)程處理請(qǐng)求,如果超時(shí),返回504錯(cuò)誤 請(qǐng)求處理結(jié)束,返回結(jié)果 FPM 從接收到處理請(qǐng)求的流程就是這樣了,那么 Nginx 又是如何發(fā)送請(qǐng)求給 fpm 的呢?這就需要從 Nginx 層面來(lái)說(shuō)明了。

我們知道,Nginx 不僅僅是一個(gè) Web 服務(wù)器,也是一個(gè)功能強(qiáng)大的 Proxy 服務(wù)器,除了進(jìn)行 http 請(qǐng)求的代理,也可以進(jìn)行許多其他協(xié)議請(qǐng)求的代理,包括本文與 fpm 相關(guān)的 fastcgi 協(xié)議。為了能夠使 Nginx 理解 fastcgi 協(xié)議,Nginx 提供了 fastcgi 模塊來(lái)將 http 請(qǐng)求映射為對(duì)應(yīng)的 fastcgi 請(qǐng)求。

Nginx 的 fastcgi 模塊提供了 fastcgi_param 指令來(lái)主要處理這些映射關(guān)系,下面 Ubuntu 下 Nginx 的一個(gè)配置文件,其主要完成的工作是將 Nginx 中的變量翻譯成 PHP 中能夠理解的變量

除此之外,非常重要的就是 fastcgi_pass 指令了,這個(gè)指令用于指定 fpm 進(jìn)程監(jiān)聽(tīng)的地址,Nginx 會(huì)把所有的 php 請(qǐng)求翻譯成 fastcgi 請(qǐng)求之后再發(fā)送到這個(gè)地址

二.PHP-FPM進(jìn)程管理 php-fpm進(jìn)程管理配置為pm參數(shù),可以設(shè)置為靜態(tài)(static)和動(dòng)態(tài)(dynamic)兩種。 詳細(xì)的配置參數(shù)有: pm.max_children:靜態(tài)方式下開(kāi)啟的php-fpm進(jìn)程數(shù)量。 pm.start_servers:動(dòng)態(tài)方式下的起始php-fpm進(jìn)程數(shù)量。 pm.min_spare_servers:動(dòng)態(tài)方式下的最小php-fpm進(jìn)程數(shù)量。 pm.max_spare_servers:動(dòng)態(tài)方式下的最大php-fpm進(jìn)程數(shù)量

靜態(tài)(static) 進(jìn)程數(shù)自始至終都是pm.max_children指定的數(shù)量,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers配置將沒(méi)有作用。 對(duì)于內(nèi)存比較吃緊,同時(shí)并發(fā)量不是很大的應(yīng)用,可以考慮采用static的方式,這樣可以很好的控制php-fpm的所消耗的總內(nèi)存數(shù),讓系統(tǒng)更加 平穩(wěn)運(yùn)行。另外由于并發(fā)量很小,可以適當(dāng)?shù)陌言O(shè)置pm.max_requests小一些,以便讓php-fpm進(jìn)程有機(jī)會(huì)重啟,從而釋放其占用的內(nèi)存動(dòng)態(tài)(dynamic) 進(jìn)程數(shù)是動(dòng)態(tài)的,最開(kāi)始是pm.start_servers指定的數(shù)量,如果請(qǐng)求較多,則會(huì)自動(dòng)增加,但不超過(guò) pm.max_children指定的數(shù)量,同時(shí)保證空閑的進(jìn)程數(shù)不小于pm.min_spare_servers,如果進(jìn)程數(shù)較多,也會(huì)進(jìn)行相應(yīng)清理, 保證多余的進(jìn)程數(shù)不多于pm.max_spare_servers。

那么,對(duì)于我們的服務(wù)器,選擇哪種執(zhí)行方式比較好呢?事實(shí)上,跟Apache一樣,運(yùn)行的PHP程序在執(zhí)行完成后,或多或少會(huì)有內(nèi)存泄露的問(wèn)題。這也是為什么開(kāi)始的時(shí)候一個(gè)php-fpm進(jìn)程只占用3M左右內(nèi)存,運(yùn)行一段時(shí)間后就會(huì)上升到20-30M的原因了。

對(duì)于內(nèi)存大的服務(wù)器(比如8G以上)來(lái)說(shuō),指定靜態(tài)的max_children實(shí)際上更為妥當(dāng),因?yàn)檫@樣不需要進(jìn)行額外的進(jìn)程數(shù)目控制,會(huì)提高效率。因?yàn)轭l繁開(kāi)關(guān)php-fpm進(jìn)程也會(huì)有時(shí)滯,所以內(nèi)存夠大的情況下開(kāi)靜態(tài)效果會(huì)更好。數(shù)量也可以根據(jù) 內(nèi)存/30M 得到,比如8GB內(nèi)存可以設(shè)置為100,那么php-fpm耗費(fèi)的內(nèi)存就能控制在 2G-3G的樣子。如果內(nèi)存稍微小點(diǎn),比如1G,那么指定靜態(tài)的進(jìn)程數(shù)量更加有利于服務(wù)器的穩(wěn)定。這樣可以保證php-fpm只獲取夠用的內(nèi)存,將不多的內(nèi)存分配給其他應(yīng)用去使用,會(huì)使系統(tǒng)的運(yùn)行更加暢通。

對(duì)于小內(nèi)存的服務(wù)器來(lái)說(shuō),比如256M內(nèi)存的VPS,即使按照一個(gè)20M的內(nèi)存量來(lái)算,10個(gè)php-cgi進(jìn)程就將耗掉200M內(nèi)存,那系統(tǒng)的崩潰就應(yīng)該很正常了。因此應(yīng)該盡量地控制php-fpm進(jìn)程的數(shù)量,大體明確其他應(yīng)用占用的內(nèi)存后,給它指定一個(gè)靜態(tài)的小數(shù)量,會(huì)讓系統(tǒng)更加平穩(wěn)一些?;蛘呤褂脛?dòng)態(tài)方式,因?yàn)閯?dòng)態(tài)方式會(huì)結(jié)束掉多余的進(jìn)程,可以回收釋放一些內(nèi)存,所以推薦在內(nèi)存較少的服務(wù)器或VPS上使用。具體最大數(shù)量根據(jù) 內(nèi)存/20M 得到。比如說(shuō)512M的VPS,建議pm.max_spare_servers設(shè)置為20。至于pm.min_spare_servers,則建議根據(jù)服務(wù)器的負(fù)載情況來(lái)設(shè)置,比較合適的值在5~10之間。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 吉林省| 江永县| 肇东市| 阳高县| 大丰市| 宜丰县| 措勤县| 邓州市| 新河县| 青岛市| 平利县| 公主岭市| 云阳县| 巩义市| 富宁县| 和田市| 霍城县| 甘谷县| 太白县| 兰坪| 西吉县| 海门市| 宜兰县| 阿克苏市| 杭锦旗| 宜兰市| 六安市| 繁昌县| 当雄县| 泗洪县| 富蕴县| 红桥区| 呼玛县| 东辽县| 黄梅县| 汝州市| 珲春市| 韩城市| 会昌县| 齐齐哈尔市| 镇原县|