php不自动释放内存导致内存不足的情况

Song1357 次浏览0个评论2022年04月19日

最近一台并发高的服务器切换到新的服务器后,明明并发已经不高了,但是内存占用还是很高。

free -m
              total        used        free      shared  buff/cache   available
Mem:           7692        6712         570         105         410         616
Swap:             0           0           0

我使用ps -aux | sort -k4nr | head -n 10 查询占用最高的10个进程是PHP-FPM;通过重启PHP后内存降低

sudo service php7.4-fpm restart


接下来我们看下如何自动清除内存?

一种方法是减少php-fpm进程总数,来达到减少php-fpm内存占用的问题,例如调整pm.max_children等数值。实际使用过程中还发现进程数调低后,php-fpm进程还长期占用内存并没有及时释放。这时,解决的方法就是减少pm.max_requests数。

设置:

pm.max_requests = 1000

最大请求数max_requests,即当一个 PHP-CGI 进程处理的请求数累积到 max_requests 个后,自动重启该进程,这样达到了释放内存的目的了。以2GB内存的VPS主机设置为例,如果你设置的数值没有达到释放内存可以继续调低。

当php-fpm进程达到了pm.max_requests设定的数值后,PHP就会重启该进程,从而释放内存了。

对于大内存,对并发和可用性有要求的话,建议使用static管理模式+最大的pm.max_children。如果是小内存的服务器,建议使用dynamic或者ondemand模式,同时降低pm.start_servers和pm.max_spare_servers进程数。

提交评论

请登录后评论

用户评论

    当前暂无评价,快来发表您的观点吧...

更多相关好文