解决PHP-FPM进程疯狂占用内存的问题(Linux)

起因

VPS装好环境后。架上博客。刚开始一切都好。第二天收到监控宝的提醒,晚上有两次宕机,连接服务器失败的情况。

VPS是BuyVM的最低配的128m内存(突发内存256m),OpenVZ的架构,也无法通过增加swap来缓解内存压力。

检查程序、日志也没发现什么有疑点的地方,想起来编译php的时候没有配置php参数。遂改了一下php配置。得到有效缓解,具体改动如下:

/usr/local/php/etc/php-fpm.conf

pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 10

重启php-fpm服务,早上10点多改的,下午4点左右top一下发现php-fpm内存占用还是居高不下。逼不得已改动了如下配置:
pm.max_requests = 1

世界清净了,php-fpm进程始终保持在5-8个。哦也。

总结

每个请求完成后php-cgi会回收内存,但是不会释放给操作系统,这样就会导致大量内存被php-cgi占用

pm.max_requests的意思是发送多少个请求后会重启该线程,需要适当降低这个值,让php-fpm自动的释放内存,还有另一个跟它有关联的值max_children,这个是每次php-fpm会建立多少个进程,这样实际上的内存消耗=max_children*max_requests*每个请求使用内存

update

最近很多通过搜索引擎进来看到这篇文章的。友情提示一下:
在小内存下调整max_requests是个不错的方案。但是在大内存下还是内存资源吃紧,我还是建议你检查一下自己的代码逻辑和架构方案吧。

去打赏

您的支持将鼓励我们继续创作!

[微信] 扫描二维码打赏

9 thoughts on “解决PHP-FPM进程疯狂占用内存的问题(Linux)”

  1. 哟西。我Vps目前的配置是256m内存突发512超售不严重的情况下。运行Wordpress这个值建议是多少。或者有其他建议。

    1. 注意一下场景,我是128m小内存vps。还需要啥性能- -#现在搬家到aws。还勉强吧。后边再准备搬家到linode。那我就不用酱紫鸟。

发表评论

电子邮件地址不会被公开。