【发布时间】:2018-02-05 08:20:58
【问题描述】:
我们有一个问题,在生产服务器上,我们系统中的一些错误锁定/挂起一个 php-fpm 进程并且没有被释放,这导致在 10-15 分钟内锁定更多进程(可能尝试访问未释放的共享资源),一段时间后服务器无法为任何新用户提供服务,因为没有可用的免费 php-fpm 进程。
在尝试找出造成死锁的原因的同时,我们正在考虑创建一个简单的 cron 作业,它每 1-2 分钟运行一次,如果它看到最大进程数高于 X,它将杀死所有 php-fpm 进程或者重启 php-fpm。
您如何看待这个问题的简单临时解决方案? 简单的php脚本,
$processCount = shell_exec("ps aux|grep php-fpm|grep USERNAME -c");
$killAll = $processCount >=60;
if($killAll){
echo "killing all processes";
try{
shell_exec("kill -9 $(lsof -t -i:9056)");
}catch(Exception $e1){
}
shell_exec("sudo service php56u-php-fpm restart");
$processCount = shell_exec("ps aux|grep php-fpm|grep USERNAME -c"); //check how much now
}
【问题讨论】:
-
更新你的PHP版本到PHP7,fpm比5.6好很多。他们支持 PHPNG 的速度非常快。
-
为什么在 PHP 中这样做?您可能应该解决实际问题,而不是放置一些随机重新启动服务的东西。或者将站点迁移到工作就绪的生产服务器。
标签: php