我有一个相对繁忙的Web服务器,使用Nginx和PHP-FPM,并且在升级到PHP 7.2之后,我注意到PHP-FPM进程在一段时间后耗尽了我的所有RAM。
该服务器是一台KVM计算机(Centos 7),具有32Gb RAM和8Gb交换空间:
[root@www ~]# free
total used free shared buff/cache available
Mem: 32779736 18397204 239372 1508476 14143160 12417824
Swap: 8257532 167680 8089852
在这里您可以看到内存消耗: https://justpaste.it/2vaqy (我尝试将其粘贴到此处,但Stackoverflow表示我的帖子看起来是垃圾邮件)
正如您在RSS栏目中看到的那样,在3月4日,每个php-fpm进程都使用约1Gb的RAM,这使22GB的总内存消耗(22个进程)成为可能。
每个PHP-FPM进程ram的使用每天增加约300Mb。
这是我的配置:
[root@www ~]# cat /etc/php-fpm.conf | sed '/^;/d' | sed '/^$/d'
include=/etc/php-fpm.d/*.conf
[global]
pid = /run/php-fpm/php-fpm.pid
error_log = /var/log/php-fpm/error.log
daemonize = yes
[root@www ~]# cat /etc/php-fpm.d/www.conf | sed '/^;/d' | sed '/^$/d'
[www]
user = www
group = www
listen = xxxxx/php-fpm.sock
listen.mode = 0666
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 200
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.status_path = /xxxx-fpm
slowlog = /var/log/php-fpm/www-slow.log
request_terminate_timeout = 5h
php_flag[display_errors] = off
php_admin_value[error_log] = xxxx/php-fpm-error.log
php_admin_flag[log_errors] = on
这是我的phpinfo: https://justpaste.it/50zin
有什么想法吗? 先感谢您。问候。
答案 0 :(得分:1)
这看起来很简单,如果发生内存泄漏,则必须尽可能多地重新生成php worker,可以使用pm.max_requests
选项进行配置。
从500开始,您拥有的最佳性能越多,但泄漏也越多。