<pre>
本系列屬于php進(jìn)階筆記。
本章內(nèi)容慢更,在日常工作中用到就添加進(jìn)來(lái)。希望大家一起討論更新。
</pre>
<h2>max_children</h2>
max_children是PHP-FPM Pool 最大的子進(jìn)程數(shù),他數(shù)值取決于你的服務(wù)器內(nèi)存。 假設(shè)你打算給10G內(nèi)存給當(dāng)前配置的PHP-FPM Pool,一般一個(gè)PHP請(qǐng)求占用內(nèi)存10M-40M,我們按站點(diǎn)每個(gè)PHP請(qǐng)求占用內(nèi)存25M,這樣max_children = 10G/25M = 409。所以,這個(gè)值可以根據(jù)情況算出來(lái)。
<h2>max_requests</h2>
max_requests是每個(gè)子進(jìn)程重生之前處理的請(qǐng)求數(shù), 默認(rèn)值為unlimited(默認(rèn)為1024),可以設(shè)置小一點(diǎn)(如500左右),這樣可以避免內(nèi)存泄露帶來(lái)的問(wèn)題
Nginx代理過(guò)程,將業(yè)務(wù)服務(wù)器請(qǐng)求數(shù)據(jù)緩存到本地文件,再將文件數(shù)據(jù)轉(zhuǎn)發(fā)給請(qǐng)求客戶端。高并發(fā)的客戶端請(qǐng)求,必然要求服務(wù)器文件句柄的并發(fā)打開(kāi)限制。使用ulimit命令(ulimit -n),查看Linux系統(tǒng)文件句柄并發(fā)限制,默認(rèn)是1024,我們可以改為65535(2 的 16 次方,這是系統(tǒng)端口的極限)。
修改的方法為:修改系統(tǒng)文件/etc/security/limits.conf,添加如下信息,并重新啟動(dòng)系統(tǒng)生效。
soft nofile 65535
hard nofile 65535
然后在Nginx配置文件中,把文件限制及連接數(shù)信息改為65535:
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 65535;
}
<h2>request_terminate_timeout</h2>
如果你的服務(wù)器性能足夠好,且寬帶資源足夠充足,PHP腳本沒(méi)有系循環(huán)或BUG的話你可以直接將”request_terminate_timeout”設(shè)置成0s。
0s的含義是讓PHP-CGI一直執(zhí)行下去而沒(méi)有時(shí)間限制。而如果你做不到這一點(diǎn),也就是說(shuō)你的PHP-CGI可能出現(xiàn)某個(gè)BUG,或者你的寬帶不夠充足或者其他的原因?qū)е履愕腜HP-CGI能夠假死那么就建議你給”request_terminate_timeout”賦一個(gè)值,這個(gè)值可以根據(jù)你服務(wù)器的性能進(jìn)行設(shè)定。
一般來(lái)說(shuō)性能越好你可以設(shè)置越高,20分鐘-30分鐘都可以。由于我的服務(wù)器PHP腳本需要長(zhǎng)時(shí)間運(yùn)行,有的可能會(huì)超過(guò)10分鐘因此我設(shè)置了900秒,這樣不會(huì)導(dǎo)致PHP-CGI死掉而出現(xiàn)502 Bad gateway這個(gè)錯(cuò)誤。