NGINX下PHP-FPM的内存泄漏问题

服务器内存

说到内存泄漏,感觉挺遥远的,至少之前小卓没怎么遇到过。最近帮惠州的朋友给一台CENTOS服务器升级,升级后安装了NGINXPHP-FPM,然而却是问题不断。先是MariaDB数据库在运行一段时间后挂了,恢复后运行了一段时间又出现PHP-FPM服务挂掉的问题。调查发现内存占用奇高,但访问量并不高,于是只能怀疑是内存泄漏的问题了。最后调查发现是PHP-FPM没有释放掉内存导致内存耗尽,网站挂掉。

按照官方的说法,PHP-FPM并不存在内存泄漏问题,每个请求完成后PHP-FPM会回收内存,但是不会释放给操作系统,这样就会导致大量内存被PHP-FPM占用。

官方的解决办法是降低PHP_FCGI_MAX_REQUESTS的值,对于PHP-FPM而言,就是要修改PHP-FPM配置文件中的就是max_requests。找到正确的配置文件,我这边的配置文件是/etc/php-fpm.d/www.conf,不同服务器可能会有些不一样。打开文件,看到pm.max_requests的默认设置是被注释掉的,按照该配置上面的英文解说我们可以了解这个值的作用。

max_request的描述

按英文解说的大意是:max_requests值是设置了每个进程发送多少个请求后会重启该进程,这对于那些在第三方库中存在的内存泄漏情况是一个有用的解决方案。如果进程允许处理无限的请求,那么设置该值为0。等价于PHP_FCGI_MAX_REQUESTS。默认值为0。

现在我们知道需要适当设置这个值,用以让PHP-FPM进程在处理了一定量的请求后自动的释放内存。根据服务器PHP-FPM进程占用的内存情况,我设置了max_requests值为500。经过一段时间观察,发现内存占用稳定在50%左右,NGINX服务器再也没有出现内存泄漏导致内存耗光而挂掉的情况了。

>>原创文章,欢迎转载。转载请注明:转载自惠州市卓优互联科技有限公司,谢谢!
>>原文链接地址:NGINX下PHP-FPM的内存泄漏问题


关于作者

留下您的回复