系統(tǒng)上線半年多澎胡,最近頻繁出現(xiàn) 504 Gateway Time-out述暂,重啟php-fpm問題暫時(shí)解決晃财。所以寫此文章記錄調(diào)優(yōu)過程叨橱。
Tip
根據(jù)情況可以分析,問題主要出在php-fpm上,各種谷歌后罗洗,找到部分推薦配置愉舔,解決php-fpm卡頓或崩潰的方法。
第一步栖博,查看服務(wù)器硬件配置屑宠,對(duì)癥下藥。
1.查看cpu信息
cat /proc/cpuinfo
2.查看內(nèi)存(主要)
cat /proc/meminfo
或
free
total:總內(nèi)存3.7G
used:已用內(nèi)存360M
free:系統(tǒng)預(yù)留
available:可用內(nèi)存 3.2G(得到這個(gè)值仇让,就知道后面的maxchild如何設(shè)置了)
知道這幾個(gè)就可以了典奉。
第二步:開始修改環(huán)境配置
- max_children
;摘自,php-fpm.conf 丧叽。默認(rèn)值
pm = dynamic
; The number of child processes to be created when pm is set to 'static' and the
; maximum number of child processes when pm is set to 'dynamic' or 'ondemand'.
; This value sets the limit on the number of simultaneous requests that will be
; served. Equivalent to the ApacheMaxClients directive with mpm_prefork.
; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP
; CGI. The below defaults are based on a server without much resources. Don't
; forget to tweak pm.* to fit your needs.
; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand'
; Note: This value is mandatory.
pm.max_children = 5
默認(rèn)最大cgi 數(shù)量為5卫玖,為了節(jié)約資源
dynamic 和 static 該如何選擇?
- static(靜態(tài)) :表示在fpm運(yùn)行時(shí)直接fork出pm.max_chindren個(gè)worker進(jìn)程
- dynamic(動(dòng)態(tài)):表示運(yùn)行時(shí)fork出start_servers個(gè)進(jìn)程踊淳,隨著負(fù)載的情況假瞬,動(dòng)態(tài)的調(diào)整,最多不超過max_children個(gè)進(jìn)程
由于我們公司服務(wù)器只跑php迂尝,所以不用考慮內(nèi)存占用影響其他業(yè)務(wù)效率額問題脱茉,所以選擇static,靜態(tài)分配垄开,提升效率琴许。
tip:一般推薦用static,優(yōu)點(diǎn)是不用動(dòng)態(tài)的判斷負(fù)載情況溉躲,提升性能榜田,缺點(diǎn)是多占用些系統(tǒng)內(nèi)存資源
- max_children這個(gè)值原則上是越大越好,php-cgi的進(jìn)程多了就會(huì)處理的很快锻梳,排隊(duì)的請(qǐng)求就會(huì)很少箭券。
設(shè)置”max_children”也需要根據(jù)服務(wù)器的性能進(jìn)行設(shè)定,這是為什么要查看系統(tǒng)空閑內(nèi)存疑枯。
- 一般來說一臺(tái)服務(wù)器正常情況下每一個(gè)php-cgi所耗費(fèi)的內(nèi)存在20M左右假設(shè)“max_children”設(shè)置成100個(gè)辩块,20M*100=2000M也就是說在峰值的時(shí)候所有PHP-CGI所耗內(nèi)存在2000M以內(nèi)。
假設(shè)“max_children”設(shè)置的較小神汹,比如5-10個(gè)庆捺,那么php-cgi就會(huì)“很累”,處理速度也很慢屁魏,等待的時(shí)間也較長滔以。如果長時(shí)間沒有得到處理的請(qǐng)求就會(huì)出現(xiàn)504 Gateway Time-out這個(gè)錯(cuò)誤,而正在處理的很累的那幾個(gè)php-cgi如果遇到了問題就會(huì)出現(xiàn)502 Bad gateway這個(gè)錯(cuò)誤氓拼。
最終設(shè)置
pm = static
max_children = 150
;150*20M=3G 內(nèi)存左右你画,空閑3.2抵碟。