現(xiàn)象:
某日和開發(fā)的同事調試服務器php狀態(tài)時候發(fā)現(xiàn)下面這種情況:
ps aux |grep php-fcgi |wc -l602表面上看是沒什么問題,可是我明明記得 php-fcgi我只開了
300個??!難道有人改過了?
立刻查看
php-fpm.conf 找到這一項
<value name="max_children">300</value> 確實是300個啊~~,怎么會有600個?
ps aux |grep php-fcgi |morewww 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 restartShutting down php_fpm . doneStarting php_fpm done再次查看
ps aux |grep php-fcgi |wc -l602還是多了300個.....奇怪了,這三百個是怎么來的呢?
因為我們的php和nginx是一起的,所以我又想到了nginx。
在訪問量不高的時候偷偷重啟了一下nginx
/etc/init.d/nginx restart停止 nginx: [確定]Shutting down php_fpm done啟動 nginx: [確定]Starting php_fpm done再次查看,我倒.....真服了。我和開發(fā)的同事都一頭霧水
ps aux |grep php-fcgi |wc -l602這回不能簡單的考慮重啟服務了,需要想想到底是哪里出的問題,而且這是生產(chǎn)服務器不能隨便弄。
因為現(xiàn)在線上的服務都還算正常,這個問題我們就先放下了。
第二天,那個同事跟我說。那個問題他知道怎么解決了,而且也知道是什么原因造成的。我趕緊問清楚:
原來是這樣,最近因為測試比較頻繁,對
nginx服務重啟次數(shù)較多。不知道哪次重啟時候失敗導致
nginx進程雖然停止了,但是一起的300個php-fcgi卻沒有重啟,導致這些進程還留在內存里不能被釋放。需要強制手動殺掉所有的php-fcgi進程后再重啟php-fpm就可以了。
聽到這里我恍然大悟。馬上去服務器上操作,果然問題解決了,具體步驟如下
pkill php-cgi再次查看
ps aux |grep php-fcgi |wc -l1好了沒有了,趕緊重啟,因為現(xiàn)在訪問網(wǎng)頁已經(jīng)是 502了。
/usr/local/php-fcgi/sbin/php-fpm restartShutting down php_fpm warning, no pid file found - php-fpm is not running ?Starting php_fpm done再次查看進程數(shù)
ps aux |grep php-cgi |wc -l302好了,正常了,呵呵
后來我在試驗機上面又測試了一下,果然重現(xiàn)了那個問題
[root@ime /]# /etc/init.d/nginx restart
停止 nginx: [確定]
Shutting down php_fpm done
啟動 nginx: [確定]
Starting php_fpm done
[root@ime /]# ps aux |grep php-cgi|wc -l
302
這時進程數(shù)是正常的,下面殺掉nginx進程[root@ime /]# pkill nginx
[root@ime /]# lsof -i:80
[root@ime /]# ps aux |grep php-cgi|wc -l
302
這300個進程就傻乎乎的留在這里了,再次啟動nginx[root@ime /]# /etc/init.d/nginx start
啟動 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沒有去理會在內存中存在的進程,繼續(xù)開啟了300個...我如果再重復這個過程呢?[root@ime /]# pkill nginx
[root@ime /]# lsof -i:80
[root@ime /]# /etc/init.d/nginx start
啟動 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個... 繼續(xù)重復[root@ime /]# /etc/init.d/nginx start
啟動 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
機器開始變慢了,估計再重復幾次機器就會掛掉了...
[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 ?
啟動 nginx: [確定]
Starting php_fpm done
[root@ime /]# ps aux |grep php-cgi|wc -l
302
好了,恢復正常.... 看來需要修改一下 php-fpm的啟動腳本了本文出自 “story的天空” 博客,請務必保留此出處http://storysky.blog.51cto.com/628458/282939