无限生成php-cgi.exe内存占用100%的初级解决方案(奇招)
本帖最后由 李大人 于 2024-9-4 11:05 编辑我有一台windows的服务器今年买了专业版,安装了apache防火墙,以及apache防火墙需要的Memcached。
安装之后就悲剧了,服务器总是宕机。(apache停止服务)
后来在任务管理器中发现了无数个php-cgi.exe占完了内存。
原本还想安装流量统计也用不了了。
看了坛子里几十篇关于php-cgi.exe无限生成爆内存的帖子,甚至还有爆CPU的,没能解决我的问题。
百度上查了几百篇也没能解决。
后来突发奇想,仿制了宝塔本身的一个功能,临时解决了,至少是自动化的。
我的php是设置了进程回收、超时、上限什么了的,但php-cgi.exe进程就是会不停地增多,逐渐突破限制。
经过几百篇的资料阅读和调试,感觉是因为 apache、php的配置出了问题,导致有php-cgi.exe进程出错了,这些错误的进程无法被超时、超访问数量等规则回收。
但这个配置找不到在哪,以及怎么修复。由于这个服务器上跑着几百个域名,也不可能重装、重新挨个配置。
每次出问题时,可以手动通过重启php、重启apache解决。
在宝塔面板中手动重启时,不知道其背后关联了什么命令,会清除所有php-cgi.exe进程。我在计划任务中添加了重启apache、重启Php的命令,但无法清除死掉的php-cgi.exe进程(僵尸进程),被占用的内存无法释放。
所以添加了一个清除所有php-cgi.exe的计划任务,在重启php时清除所有php-cgi.exe进程。现在可以做到服务器稳定运行。
我定的计划任务为 每小时 重启一次 apache、php、杀一次进程。
弊端就是服务重启、杀进程时如果恰好有访客,他的访问会中断。
服务会中断几秒,比起整个服务器挂掉,这个已经好太多了。
windows 添加 计划任务 ,bat脚本,taskkill /F /IM php-cgi.exe ,1小时运行一次。具体频次,可以参考自己服务能坚持多久不挂,跟内存、访问量有关系每个人的都不一样,我是20+小时就会爆内存。
这个是临时解决方案,也可以正常用。终极方案还是重装环境。
(但我觉得,我的php-cgi.exe进程出错变僵尸进程有可能是因为服务器被攻击,日志里很多攻击记录,某些类型的攻击可能会导致服务异常,继而产生僵尸进程)
您好,僵尸进程,这个无法判断因何生成的,目前的解决方法就是手动kill进程
页:
[1]