摘要:首先,我們關(guān)注下的運(yùn)行方式模式始終保持一個(gè)固定數(shù)量的子進(jìn)程,這個(gè)數(shù)由定義,這種方式很不靈活,也通常不是默認(rèn)的。指的是每個(gè)子進(jìn)程在處理了多少個(gè)請求數(shù)量之后就重啟。
首先,我們關(guān)注下 PHP-FPM 的運(yùn)行方式:
pm = static模式:
始終保持一個(gè)固定數(shù)量的子進(jìn)程,這個(gè)數(shù)由pm.max_children定義,這種方式很不靈活,也通常不是默認(rèn)的。
優(yōu)點(diǎn)是不用動(dòng)態(tài)的判斷負(fù)載情況,提升性能;缺點(diǎn)是多占用些系統(tǒng)內(nèi)存資源。在內(nèi)存足夠的前提下性能最強(qiáng)
用此模式每天需要設(shè)置固定時(shí)間重啟php
pm = dynamic模式:
啟動(dòng)時(shí),會(huì)產(chǎn)生固定數(shù)量的子進(jìn)程(由pm.start_servers控制)可以理解成最小子進(jìn)程數(shù),而最大子進(jìn)程數(shù)則由pm.max_children去控制,OK,這樣的話,子進(jìn)程數(shù)會(huì)在最大和最小數(shù)范圍中變化,還沒有完,閑置的子進(jìn)程數(shù)還可以由另2個(gè)配置控制,分別是pm.min_spare_servers和pm.max_spare_servers,也就是閑置的子進(jìn)程也可以有最小和最大的數(shù)目,而如果閑置的子進(jìn)程超出了pm.max_spare_servers,則會(huì)被殺掉。
pm = ondemand模式:
這種模式和pm = dynamic相反,把內(nèi)存放在第一位,他的工作模式很簡單,每個(gè)閑置進(jìn)程,在持續(xù)閑置了pm.process_idle_timeout秒后就會(huì)被殺掉,有了這個(gè)模式,到了服務(wù)器低峰期內(nèi)存自然會(huì)降下來,如果服務(wù)器長時(shí)間沒有請求,就只會(huì)有一個(gè)php-fpm主進(jìn)程,當(dāng)然弊端是,遇到高峰期或者如果pm.process_idle_timeout的值太短的話,無法避免服務(wù)器頻繁創(chuàng)建進(jìn)程的問題,因此pm = dynamic和pm = ondemand誰更適合視實(shí)際情況而定。
PHP-FPM 子進(jìn)程數(shù)量,是不是越多越好?
當(dāng)然不是,pm.max_chindren,進(jìn)程多了,增加進(jìn)程管理的開銷以及上下文切換的開銷。
更核心的是,能并發(fā)執(zhí)行的 php-fpm 進(jìn)程不會(huì)超過 cpu 個(gè)數(shù)。
如何設(shè)置,取決于你的代碼
如果代碼是 CPU 計(jì)算密集型的,pm.max_chindren 不能超過 CPU 的內(nèi)核數(shù)。
如果不是,那么將 pm.max_chindren 的值大于 CPU 的內(nèi)核數(shù),是非常明智的。
國外技術(shù)大拿給出這么個(gè)公式:
在 N + 20% 和 M/m 之間。
N 是 CPU 內(nèi)核數(shù)量。
M 是 PHP 能利用的內(nèi)存數(shù)量。
m 是每個(gè) PHP 進(jìn)程平均使用的內(nèi)存數(shù)量。
適用于 dynamic 方式。
static方式:M/(m * 1.2)
當(dāng)然,還有一種保險(xiǎn)的方式,來配置 max_children。適用于 static 方式。
先把 max_childnren 設(shè)置成一個(gè)比較大的值。
穩(wěn)定運(yùn)行一段時(shí)間后,觀察 php-fpm 的 status 里的 max
active processes 是多少
然后把 max_children 配置比它大一些就可以了。
pm.max_requests:指的是每個(gè)子進(jìn)程在處理了多少個(gè)請求數(shù)量之后就重啟。
這個(gè)參數(shù),理論上可以隨便設(shè)置,但是為了預(yù)防內(nèi)存泄漏的風(fēng)險(xiǎn),還是設(shè)置一個(gè)合理的數(shù)比較好
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/29191.html
摘要:首先,我們關(guān)注下的運(yùn)行方式模式始終保持一個(gè)固定數(shù)量的子進(jìn)程,這個(gè)數(shù)由定義,這種方式很不靈活,也通常不是默認(rèn)的。指的是每個(gè)子進(jìn)程在處理了多少個(gè)請求數(shù)量之后就重啟。 首先,我們關(guān)注下 PHP-FPM 的運(yùn)行方式:pm = static模式: 始終保持一個(gè)固定數(shù)量的子進(jìn)程,這個(gè)數(shù)由pm.max_children定義,這種方式很不靈活,也通常不是默認(rèn)的。優(yōu)點(diǎn)是不用動(dòng)態(tài)的判斷負(fù)載情況,提升性能;...
摘要:是用于管理進(jìn)程池的軟件,用于接收和處理服務(wù)器的請求。這個(gè)兩個(gè)設(shè)置默認(rèn)是關(guān)閉的,建議開啟,進(jìn)程池配置中有一個(gè)的區(qū)域,意為進(jìn)程池,通常建議一個(gè)應(yīng)用使用一個(gè)進(jìn)程池。配置文件有默認(rèn)名為的配置內(nèi)容。總結(jié)沒有固定的配置,要根據(jù)實(shí)際情況設(shè)置。 PHP-FPM 是用于管理 PHP 進(jìn)程池的軟件,用于接收和處理 Web 服務(wù)器的請求。PHP-FPM 會(huì)創(chuàng)建一個(gè)主進(jìn)程,控制何時(shí)以及如何把 HTTP 請求轉(zhuǎn)...
摘要:等平臺(tái)平臺(tái)由于我開發(fā)以為主,所以就用的環(huán)境配置來學(xué)習(xí)。啟動(dòng)進(jìn)程的用戶和用戶組,進(jìn)程運(yùn)行的用戶必須要設(shè)置。模式模式,表示啟動(dòng)進(jìn)程是動(dòng)態(tài)分配的,隨著請求量動(dòng)態(tài)變化的。 centos等linux平臺(tái) /usr/local/php/php /usr/local/php/etc/php.ini /usr/local/php/sbin/php-fpm /usr/local/php/etc/php-...
摘要:等平臺(tái)平臺(tái)由于我開發(fā)以為主,所以就用的環(huán)境配置來學(xué)習(xí)。啟動(dòng)進(jìn)程的用戶和用戶組,進(jìn)程運(yùn)行的用戶必須要設(shè)置。模式模式,表示啟動(dòng)進(jìn)程是動(dòng)態(tài)分配的,隨著請求量動(dòng)態(tài)變化的。 centos等linux平臺(tái) /usr/local/php/php /usr/local/php/etc/php.ini /usr/local/php/sbin/php-fpm /usr/local/php/etc/php-...
閱讀 4693·2021-09-22 16:06
閱讀 2078·2021-09-22 15:22
閱讀 1420·2019-08-30 15:54
閱讀 2518·2019-08-30 15:44
閱讀 2344·2019-08-29 16:31
閱讀 2013·2019-08-29 16:26
閱讀 2332·2019-08-29 12:41
閱讀 735·2019-08-29 12:22