php-fpm優(yōu)化參數(shù)詳解

php-fpm.conf重要參數(shù)詳解

pid = run/php-fpm.pid

#pid設置,默認在安裝目錄中的var/run/php-fpm.pid,建議開啟

error_log = log/php-fpm.log

#錯誤日志筐钟,默認在安裝目錄中的var/log/php-fpm.log

log_level = notice

#錯誤級別. 可用級別為: alert(必須立即處理), error(錯誤情況), warning(警告情況), notice(一般重要信息), debug(調(diào)試信息). 默認: notice.

emergency_restart_threshold = 60

emergency_restart_interval = 60s

#表示在emergency_restart_interval所設值內(nèi)出現(xiàn)SIGSEGV或者SIGBUS錯誤的php-cgi進程數(shù)如果超過 emergency_restart_threshold個灵疮,php-fpm就會優(yōu)雅重啟。這兩個選項一般保持默認值糙俗。

process_control_timeout = 0

#設置子進程接受主進程復用信號的超時時間. 可用單位: s(秒), m(分), h(小時), 或者 d(天) 默認單位: s(秒). 默認值: 0.

daemonize = yes

#后臺執(zhí)行fpm,默認值為yes绷杜,如果為了調(diào)試可以改為no直秆。在FPM中,可以使用不同的設置來運行多個進程池鞭盟。 這些設置可以針對每個進程池單獨設置圾结。

listen = 127.0.0.1:9000

#fpm監(jiān)聽端口,即nginx中php處理的地址齿诉,一般默認值即可筝野。可用格式為: 'ip:port', 'port', '/path/to/unix/socket'. 每個進程池都需要設置.

listen.backlog = -1

#backlog數(shù)粤剧,-1表示無限制歇竟,由操作系統(tǒng)決定,此行注釋掉就行抵恋。

listen.allowed_clients = 127.0.0.1

#允許訪問FastCGI進程的IP焕议,設置any為不限制IP,如果要設置其他主機的nginx也能訪問這臺FPM進程弧关,listen處要設置成本地可被訪問的IP盅安。默認值是any。每個地址是用逗號分隔. 如果沒有設置或者為空世囊,則允許任何服務器請求連接

listen.owner = www

listen.group = www

listen.mode = 0666

#unix socket設置選項别瞭,如果使用tcp方式訪問,這里注釋即可株憾。

user = www

group = www

#啟動進程的帳戶和組

pm = dynamic

#對于專用服務器畜隶,pm可以設置為static。

#如何控制子進程号胚,選項有static和dynamic籽慢。如果選擇static,則由pm.max_children指定固定的子進程數(shù)猫胁。如果選擇dynamic箱亿,則由下開參數(shù)決定:

pm.max_children #,子進程最大數(shù)

pm.start_servers #弃秆,啟動時的進程數(shù)

pm.min_spare_servers #届惋,保證空閑進程數(shù)最小值髓帽,如果空閑進程小于此值,則創(chuàng)建新的子進程

pm.max_spare_servers #脑豹,保證空閑進程數(shù)最大值郑藏,如果空閑進程大于此值,此進行清理

pm.max_requests = 1000

#設置每個子進程重生之前服務的請求數(shù). 對于可能存在內(nèi)存泄漏的第三方模塊來說是非常有用的. 如果設置為 '0' 則一直接受請求. 等同于 PHP_FCGI_MAX_REQUESTS 環(huán)境變量. 默認值: 0.

pm.status_path = /status

#FPM狀態(tài)頁面的網(wǎng)址. 如果沒有設置, 則無法訪問狀態(tài)頁面. 默認值: none. munin監(jiān)控會使用到

ping.path = /ping

#FPM監(jiān)控頁面的ping網(wǎng)址. 如果沒有設置, 則無法訪問ping頁面. 該頁面用于外部檢測FPM是否存活并且可以響應請求. 請注意必須以斜線開頭 (/)瘩欺。

ping.response = pong

#用于定義ping請求的返回相應. 返回為 HTTP 200 的 text/plain 格式文本. 默認值: pong.

request_terminate_timeout = 0

#設置單個請求的超時中止時間. 該選項可能會對php.ini設置中的'max_execution_time'因為某些特殊原因沒有中止運行的腳本有用. 設置為 '0' 表示 'Off'.當經(jīng)常出現(xiàn)502錯誤時可以嘗試更改此選項必盖。

request_slowlog_timeout = 10s

#當一個請求該設置的超時時間后,就會將對應的PHP調(diào)用堆棧信息完整寫入到慢日志中. 設置為 '0' 表示 'Off'

slowlog = log/$pool.log.slow

#慢請求的記錄日志,配合request_slowlog_timeout使用

rlimit_files = 1024

#設置文件打開描述符的rlimit限制. 默認值: 系統(tǒng)定義值默認可打開句柄是1024俱饿,可使用 ulimit -n查看歌粥,ulimit -n 2048修改。

rlimit_core = 0

#設置核心rlimit最大限制值. 可用值: 'unlimited' 拍埠、0或者正整數(shù). 默認值: 系統(tǒng)定義值.

chroot =

#啟動時的Chroot目錄. 所定義的目錄需要是絕對路徑. 如果沒有設置, 則chroot不被使用.

chdir =

#設置啟動目錄失驶,啟動時會自動Chdir到該目錄. 所定義的目錄需要是絕對路徑. 默認值: 當前目錄,或者/目錄(chroot時)

catch_workers_output = yes

#重定向運行過程中的stdout和stderr到主要的錯誤日志文件中. 如果沒有設置, stdout 和 stderr 將會根據(jù)FastCGI的規(guī)則被重定向到 /dev/null . 默認值: 空.


php-fpm參數(shù)調(diào)優(yōu)

pm = dynamic;

表示使用哪種進程數(shù)量管理方式

dynamic表示php-fpm進程數(shù)是動態(tài)的枣购,最開始是pm.start_servers指定的數(shù)量嬉探,如果請求較多,則會自動增加棉圈,保證空閑的進程數(shù)不小于pm.min_spare_servers甲馋,如果進程數(shù)較多,也會進行相應清理迄损,保證多余的進程數(shù)不多于pm.max_spare_servers

static表示php-fpm進程數(shù)是靜態(tài)的, 進程數(shù)自始至終都是pm.max_children指定的數(shù)量,不再增加或減少

pm.max_children = 300;?靜態(tài)方式下開啟的php-fpm進程數(shù)量

pm.start_servers = 20;?動態(tài)方式下的起始php-fpm進程數(shù)量

pm.min_spare_servers = 5;?動態(tài)方式下的最小php-fpm進程數(shù)量

pm.max_spare_servers = 35;?動態(tài)方式下的最大php-fpm進程數(shù)量

如果pm為static, 那么其實只有pm.max_children這個參數(shù)生效账磺。系統(tǒng)會開啟設置數(shù)量的php-fpm進程

如果pm為dynamic, 那么pm.max_children參數(shù)失效芹敌,后面3個參數(shù)生效。系統(tǒng)會在php-fpm運行開始的時候啟動pm.start_servers個php-fpm進程垮抗,然后根據(jù)系統(tǒng)的需求動態(tài)在pm.min_spare_servers和pm.max_spare_servers之間調(diào)整php-fpm進程數(shù)

那么氏捞,對于我們的服務器,選擇哪種pm方式比較好呢冒版?事實上液茎,跟Apache一樣,運行的PHP程序在執(zhí)行完成后辞嗡,或多或少會有內(nèi)存泄露的問題捆等。這也是為什么開始的時候一個php-fpm進程只占用3M左右內(nèi)存,運行一段時間后就會上升到20-30M的原因了续室。

對于內(nèi)存大的服務器(比如8G以上)來說栋烤,指定靜態(tài)的max_children實際上更為妥當,因為這樣不需要進行額外的進程數(shù)目控制挺狰,會提高效率明郭。因為頻繁開關php-fpm進程也會有時滯买窟,所以內(nèi)存夠大的情況下開靜態(tài)效果會更好。數(shù)量也可以根據(jù) 內(nèi)存/30M 得到薯定,比如8GB內(nèi)存可以設置為100始绍,那么php-fpm耗費的內(nèi)存就能控制在 2G-3G的樣子。如果內(nèi)存稍微小點话侄,比如1G亏推,那么指定靜態(tài)的進程數(shù)量更加有利于服務器的穩(wěn)定。這樣可以保證php-fpm只獲取夠用的內(nèi)存满葛,將不多的內(nèi)存分配給其他應用去使用径簿,會使系統(tǒng)的運行更加暢通。

對于小內(nèi)存的服務器來說嘀韧,比如256M內(nèi)存的VPS篇亭,即使按照一個20M的內(nèi)存量來算,10個php-cgi進程就將耗掉200M內(nèi)存锄贷,那系統(tǒng)的崩潰就應該很正常了译蒂。因此應該盡量地控制php-fpm進程的數(shù)量,大體明確其他應用占用的內(nèi)存后谊却,給它指定一個靜態(tài)的小數(shù)量柔昼,會讓系統(tǒng)更加平穩(wěn)一些⊙妆妫或者使用動態(tài)方式捕透,因為動態(tài)方式會結束掉多余的進程,可以回收釋放一些內(nèi)存碴萧,所以推薦在內(nèi)存較少的服務器或VPS上使用乙嘀。具體最大數(shù)量根據(jù) 內(nèi)存/20M 得到。比如說512M的VPS破喻,建議pm.max_spare_servers設置為20虎谢。至于pm.min_spare_servers,則建議根據(jù)服務器的負載情況來設置曹质,比較合適的值在5~10之間婴噩。

在4G內(nèi)存的服務器上200就可以(我的1G測試機,開64個是最好的羽德,建議使用壓力測試獲取最佳值)

pm.max_requests = 10240;

nginx php-fpm配置過程中最大問題是內(nèi)泄漏出問題:服務器的負載不大几莽,但是內(nèi)存占用迅速增加,很快吃掉內(nèi)存接著開始吃交換分區(qū)宅静,系統(tǒng)很快掛掉银觅!其實根據(jù)官方的介紹,php-cgi不存在內(nèi)存泄漏坏为,每個請求完成后php-cgi會回收內(nèi)存究驴,但是不會釋放給操作系統(tǒng)镊绪,這樣就會導致大量內(nèi)存被php-cgi占用。

官方的解決辦法是降低PHP_FCGI_MAX_REQUESTS的值洒忧,如果用的是php-fpm蝴韭,對應的php-fpm.conf中的就是max_requests,該值的意思是發(fā)送多少個請求后會重啟該線程熙侍,我們需要適當降低這個值榄鉴,用以讓php-fpm自動的釋放內(nèi)存,不是大部分網(wǎng)上說的51200等等蛉抓,實際上還有另一個跟它有關聯(lián)的值max_children庆尘,這個是每次php-fpm會建立多少個進程,這樣實際上的內(nèi)存消耗是max_children*max_requests*每個請求使用內(nèi)存巷送,根據(jù)這個我們可以預估一下內(nèi)存的使用情況驶忌,就不用再寫腳本去kill了。

request_terminate_timeout = 30;

最大執(zhí)行時間, 在php.ini中也可以進行配置(max_execution_time)

request_slowlog_timeout = 2;?開啟慢日志

slowlog = log/$pool.log.slow;?慢日志路徑

rlimit_files = 1024;?增加php-fpm打開文件描述符的限制

php-fpm.conf的參數(shù)明說大家只要多看幾遍應該就可能記住了笑跛,至于 php-fpm性能方案應該根據(jù)實際情況而定付魔,多測試幾次得出最佳配置方案

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市飞蹂,隨后出現(xiàn)的幾起案子几苍,更是在濱河造成了極大的恐慌,老刑警劉巖陈哑,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妻坝,死亡現(xiàn)場離奇詭異,居然都是意外死亡惊窖,警方通過查閱死者的電腦和手機刽宪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爬坑,“玉大人,你說我怎么就攤上這事涂臣《芗疲” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵赁遗,是天一觀的道長署辉。 經(jīng)常有香客問我,道長岩四,這世上最難降的妖魔是什么哭尝? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮剖煌,結果婚禮上材鹦,老公的妹妹穿的比我還像新娘逝淹。我一直安慰自己,他們只是感情好桶唐,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布栅葡。 她就那樣靜靜地躺著,像睡著了一般尤泽。 火紅的嫁衣襯著肌膚如雪欣簇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天坯约,我揣著相機與錄音熊咽,去河邊找鬼。 笑死闹丐,一個胖子當著我的面吹牛横殴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播妇智,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼滥玷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了巍棱?” 一聲冷哼從身側響起惑畴,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤如贷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了砸脊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡绢陌,死狀恐怖臭笆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布次询,位于F島的核電站屯吊,受9級特大地震影響辨嗽,放射性物質(zhì)發(fā)生泄漏屉佳。R本人自食惡果不足惜谷朝,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望武花。 院中可真熱鬧圆凰,春花似錦、人聲如沸体箕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽累铅。三九已至跃须,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間娃兽,已是汗流浹背菇民。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留投储,地道東北人第练。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像玛荞,于是被迫代替她去往敵國和親娇掏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 在實際的開發(fā)和應用中偶發(fā)的502冲泥,504讓人頭痛驹碍,下面轉發(fā)一個寫的比較全面的。 PHP-fpm PHP-FPM是一...
    daos閱讀 2,352評論 2 18
  • php-fpm的啟動參數(shù) #測試php-fpm配置 /usr/local/php/sbin/php-fpm -t ...
    落櫻月千殤閱讀 1,093評論 0 2
  • [toc] 在公司的網(wǎng)站上推薦使用 docker 容器來安裝環(huán)境凡恍,一個項目一個 docker 容器志秃。 、嚼酝、 百度百...
    Mdvtrw閱讀 1,496評論 0 1
  • 作為一名中年單身的男子浮还,生活中總有熱心人來幫忙介紹對象。前不久一位朋友又給我物色了一位女子闽巩【啵看過了眾多的相親對象,...
    悅誠然閱讀 1,055評論 21 23
  • Material材質(zhì)屬于基類它們以(大多數(shù))與渲染器無關的方式定義涎跨,因此如果您決定使用不同的渲染器洼冻,則不需要重寫材...
    Doter閱讀 1,840評論 0 0