在php-fpm,许多人不知道服务器在被攻击的情况下要怎么缓解子进程的占用与排除,一大堆空闲的子进程没有被移除反而还一直占用,无形中增加了内存的负担压力。
如果你的服务器底下正在运行站群,例如.小旋风站群程序,在宝塔上所安装的PHP程序通常预设的参数都不会适用,必须经过长期的观察并且调整才会得到一个稳定的运行。
pm = ondemand
pm.process_idle_timeout = 10 // 必须使用 ondemand 模式,参数才会被触发
pm = ondemand 的运行逻辑
ondemand 模式是:
当有请求来时才启动 PHP 子进程,
当空闲时间超过pm.process_idle_timeout后就销毁。
优点:节省内存;
缺点:频繁创建 / 销毁子进程 会带来额外 CPU 消耗和延迟。
每次新建一个子进程(fork())要花几十毫秒;
如果访问高峰期反复触发,就会导致:
- FPM 不停地「创建-销毁-创建-销毁」;
- 响应时间上升;
- nginx/php-fpm socket 出现延迟甚至 502。

剧搜博客