【问题标题】:PHP-FPM child processes eating RAMPHP-FPM 子进程吃 RAM
【发布时间】:2019-03-05 08:36:55
【问题描述】:

我有一个使用 Nginx 和 PHP-FPM 的相对繁忙的 Web 服务器,在升级到 PHP 7.2 后,我注意到 PHP-FPM 进程在一段时间后占用了我所有的 RAM。

服务器是一台具有 32Gb RAM 和 8Gb 交换空间的 KVM 机器(Centos 7):

[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,这使得总内存消耗(22 个进程)为 22Gb。

每个 PHP-FPM 进程内存使用量每天增加约 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

知道发生了什么吗? 先感谢您。问候。

【问题讨论】:

    标签: php memory


    【解决方案1】:

    这看起来很简单,如果你有内存泄漏,你必须尽可能多地重新生成php worker,这个可以配置pm.max_requests选项。

    从 500 开始,越多越好,但泄漏也越多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-22
      • 2015-10-20
      • 1970-01-01
      • 2013-03-06
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      相关资源
      最近更新 更多