限制php-cgi进程数量,php-fcgi进程数超过预设值问题的解决
現(xiàn)象:
某日和開發(fā)的同事調(diào)試服務(wù)器php狀態(tài)時(shí)候發(fā)現(xiàn)下面這種情況:
ps aux |grep php-fcgi |wc -l
602
表面上看是沒什么問題,可是我明明記得 php-fcgi我只開了300個(gè)啊!難道有人改過了?
立刻查看 php-fpm.conf 找到這一項(xiàng)
300
確實(shí)是300個(gè)啊~~,怎么會(huì)有600個(gè)?
ps aux |grep php-fcgi |more
www????? 11707? 0.0? 0.7 250192? 3888 ???????? S??? 17:07
www????? 11708? 0.0? 0.7 250192? 3888 ???????? S??? 17:07
www????? 11709? 0.0? 0.7 250192? 3888 ???????? S??? 17:07
www????? 11710? 0.0? 0.7 250192? 3888 ???????? S??? 17:07
www????? 11711? 0.0? 0.7 250192? 3888 ???????? S??? 17:07
狀態(tài)都正常啊,奇怪了。嘗試把 php-fcgi重啟一下
/usr/local/php-fcgi/sbin/php-fpm restart
Shutting down php_fpm . done
Starting php_fpm? done
再次查看
ps aux |grep php-fcgi |wc -l
602
還是多了300個(gè).....奇怪了,這三百個(gè)是怎么來的呢?
因?yàn)槲覀兊膒hp和nginx是一起的,所以我又想到了nginx。
在訪問量不高的時(shí)候偷偷重啟了一下nginx
/etc/init.d/nginx restart
停止 nginx:?????????????????????????????????????????????? [確定]
Shutting down php_fpm? done
啟動(dòng) nginx:?????????????????????????????????????????????? [確定]
Starting php_fpm? done
再次查看,我倒.....真服了。我和開發(fā)的同事都一頭霧水
ps aux |grep php-fcgi |wc -l
602
這回不能簡(jiǎn)單的考慮重啟服務(wù)了,需要想想到底是哪里出的問題,而且這是生產(chǎn)服務(wù)器不能隨便弄。
因?yàn)楝F(xiàn)在線上的服務(wù)都還算正常,這個(gè)問題我們就先放下了。
第二天,那個(gè)同事跟我說。那個(gè)問題他知道怎么解決了,而且也知道是什么原因造成的。我趕緊問清楚:
原來是這樣,最近因?yàn)闇y(cè)試比較頻繁,對(duì)nginx服務(wù)重啟次數(shù)較多。不知道哪次重啟時(shí)候失敗導(dǎo)致 nginx進(jìn)程雖然停止了,
但是一起的300個(gè)php-fcgi卻沒有重啟,導(dǎo)致這些進(jìn)程還留在內(nèi)存里不能被釋放。需要強(qiáng)制手動(dòng)殺掉所有的php-fcgi進(jìn)程后再重啟php-fpm就可以了。
聽到這里我恍然大悟。馬上去服務(wù)器上操作,果然問題解決了,具體步驟如下
pkill php-cgi
再次查看
ps aux |grep php-fcgi |wc -l
1
好了沒有了,趕緊重啟,因?yàn)楝F(xiàn)在訪問網(wǎng)頁已經(jīng)是 502了。
/usr/local/php-fcgi/sbin/php-fpm restart
Shutting down php_fpm warning, no pid file found - php-fpm is not running ?
Starting php_fpm? done
再次查看進(jìn)程數(shù)
ps aux |grep php-cgi |wc -l
302
好了,正常了,呵呵
后來我在試驗(yàn)機(jī)上面又測(cè)試了一下,果然重現(xiàn)了那個(gè)問題
[root@ime /]# /etc/init.d/nginx restart
停止 nginx:?????????????????????????????????????????????? [確定]
Shutting down php_fpm? done
啟動(dòng) nginx:?????????????????????????????????????????????? [確定]
Starting php_fpm? done
[root@ime /]# ps aux |grep php-cgi|wc -l
302
這時(shí)進(jìn)程數(shù)是正常的,下面殺掉nginx進(jìn)程
[root@ime /]# pkill nginx
[root@ime /]# lsof -i:80
[root@ime /]# ps aux |grep php-cgi|wc -l
302
這300個(gè)進(jìn)程就傻乎乎的留在這里了,再次啟動(dòng)nginx
[root@ime /]# /etc/init.d/nginx start
啟動(dòng) nginx:?????????????????????????????????????????????? [確定]
Starting php_fpm? done
[root@ime /]# lsof -i:80
COMMAND?? PID USER?? FD?? TYPE DEVICE SIZE NODE NAME
nginx?? 14072 root??? 8u? IPv4? 64090?????? TCP *:http (LISTEN)
nginx?? 14073? www??? 8u? IPv4? 64090?????? TCP *:http (LISTEN)
[root@ime /]# ps aux |grep php-cgi|wc -l
603
php-fcgi沒有去理會(huì)在內(nèi)存中存在的進(jìn)程,繼續(xù)開啟了300個(gè)...
我如果再重復(fù)這個(gè)過程呢?
[root@ime /]# pkill nginx
[root@ime /]# lsof -i:80
[root@ime /]# /etc/init.d/nginx start
啟動(dòng) nginx:?????????????????????????????????????????????? [確定]
Starting php_fpm? done
[root@ime /]# pkill nginx
[root@ime /]# lsof -i:80
[root@ime /]# ps aux |grep php-cgi|wc -l
904
900個(gè)... 繼續(xù)重復(fù)
[root@ime /]# /etc/init.d/nginx start
啟動(dòng) nginx:?????????????????????????????????????????????? [確定]
Starting php_fpm? done
[root@ime /]# ps aux |grep php-cgi|wc -l
954
[root@ime /]# ps aux |grep php-cgi|wc -l
1205
機(jī)器開始變慢了,估計(jì)再重復(fù)幾次機(jī)器就會(huì)掛掉了...
[root@ime /]# pkill php-cgi
[root@ime /]# ps aux |grep php-cgi|wc -l
5
[root@ime /]# ps aux |grep php-cgi|wc -l
5
[root@ime /]# ps aux |grep php-cgi|wc -l
1
[root@ime /]# /etc/init.d/nginx restart
停止 nginx:?????????????????????????????????????????????? [確定]
Shutting down php_fpm warning, no pid file found - php-fpm is not running ?
啟動(dòng) nginx:?????????????????????????????????????????????? [確定]
Starting php_fpm? done
[root@ime /]# ps aux |grep php-cgi|wc -l
302
好了,恢復(fù)正常....
看來需要修改一下 php-fpm的啟動(dòng)腳本了
總結(jié)
以上是生活随笔為你收集整理的限制php-cgi进程数量,php-fcgi进程数超过预设值问题的解决的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python怎么用数据修改,如何更改数据
- 下一篇: docker php伪静态无效,dock