關(guān)于fastcgi的2種連接方式:tcp和unix socket
tcp連接方式
1赁豆、使用TCP層網(wǎng)絡(luò)協(xié)議通信
2魔种、可以使用不同端口監(jiān)聽多個(gè)叶摄,如127.0.0.1:9001蛤吓、127.0.0.1:9002...
3拙泽、上層可靠協(xié)議顾瞻,保證正確性和完整性
4退渗、方便做負(fù)載均衡会油、內(nèi)核優(yōu)化等
socket連接方式
1钞啸、fpm.sock是unix socket層協(xié)議通信
2、可以監(jiān)聽多個(gè)fpm.sock文件
3、高并發(fā)量時(shí)不穩(wěn)定
4忱屑、適合并發(fā)量小的應(yīng)用
5莺戒、sock文件放在/dev/shm目錄下,使用的內(nèi)存讀寫更快
關(guān)于php-fpm進(jìn)程優(yōu)化
pm = dynamic|static|ondemand 3種方式
pm.max_children:靜態(tà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ù)量。
如果dm=static惠奸,只有pm.max_children這個(gè)參數(shù)生效佛南,系統(tǒng)會(huì)開啟設(shè)置數(shù)量的php-fpm進(jìn)程嵌言。
如果dm=dynamic,pm.max_children參數(shù)失效绵载,后面3個(gè)參數(shù)生效苛白,系統(tǒng)會(huì)在php-fpm運(yùn)行開始 的時(shí)候啟動(dòng)pm.start_servers個(gè)php-fpm進(jìn)程,然后根據(jù)系統(tǒng)的需求動(dòng)態(tài)在pm.min_spare_servers和pm.max_spare_servers之間調(diào)整php-fpm進(jìn)程數(shù)购裙。
一個(gè)php-fpm進(jìn)程大約需要3M左右內(nèi)存。
靜態(tài)static方式速度更快躯畴,系統(tǒng)更穩(wěn)定,但是要保證系統(tǒng)有足夠的內(nèi)存丰嘉。
pm.max_requests = 1000
設(shè)置每個(gè)子進(jìn)程重生之前服務(wù)的請(qǐng)求數(shù). 對(duì)于可能存在內(nèi)存泄漏的第三方模塊來說是非常有用的. 如果設(shè)置為 '0' 則一直接受請(qǐng)求. 等同于 PHP_FCGI_MAX_REQUESTS 環(huán)境變量. 默認(rèn)值: 0.
也就是當(dāng)一個(gè) PHP-CGI 進(jìn)程處理的請(qǐng)求數(shù)累積到1000個(gè)后饮亏,自動(dòng)重啟該進(jìn)程峭状,防止第三方庫造成的內(nèi)存泄漏。
重啟時(shí)可能會(huì)導(dǎo)致502錯(cuò)誤劝赔,在高并發(fā)站點(diǎn)時(shí)有出現(xiàn)胆敞。
php-fpm慢日志
request_terminate_timeout = 30s #將執(zhí)行時(shí)間太長的進(jìn)程直接終止
request_slowlog_timeout = 2s #2秒
slowlog = log/$pool.log.slow #日志文件