限制php-cgi进程数量,php-fcgi进程数超过预设值问题的解决

现象:

某日和开发的同事调试服务器php状态时候发现下面这种情况:

ps aux |grep php-fcgi |wc -l

602

表面上看是没什么问题,可是我明明记得 php-fcgi我只开了300个啊!难道有人改过了?

立刻查看 php-fpm.conf 找到这一项

300

确实是300个啊~~,怎么会有600个?

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

状态都正常啊,奇怪了。尝试把 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个.....奇怪了,这三百个是怎么来的呢?

因为我们的php和nginx是一起的,所以我又想到了nginx。

在访问量不高的时候偷偷重启了一下nginx

/etc/init.d/nginx restart

停止 nginx:                                               [确定]

Shutting down php_fpm  done

启动 nginx:                                               [确定]

Starting php_fpm  done

再次查看,我倒.....真服了。我和开发的同事都一头雾水

ps aux |grep php-fcgi |wc -l

602

这回不能简单的考虑重启服务了,需要想想到底是哪里出的问题,而且这是生产服务器不能随便弄。

因为现在线上的服务都还算正常,这个问题我们就先放下了。

第二天,那个同事跟我说。那个问题他知道怎么解决了,而且也知道是什么原因造成的。我赶紧问清楚:

原来是这样,最近因为测试比较频繁,对nginx服务重启次数较多。不知道哪次重启时候失败导致 nginx进程虽然停止了,

但是一起的300个php-fcgi却没有重启,导致这些进程还留在内存里不能被释放。需要强制手动杀掉所有的php-fcgi进程后再重启php-fpm就可以了。

听到这里我恍然大悟。马上去服务器上操作,果然问题解决了,具体步骤如下

pkill php-cgi

再次查看

ps aux |grep php-fcgi |wc -l

1

好了没有了,赶紧重启,因为现在访问网页已经是 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

再次查看进程数

ps aux |grep php-cgi |wc -l

302

好了,正常了,呵呵

后来我在试验机上面又测试了一下,果然重现了那个问题

[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

这时进程数是正常的,下面杀掉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没有去理会在内存中存在的进程,继续开启了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个... 继续重复

[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的启动脚本了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值