php - PHP-FPM 子进程吃 RAM
问题描述
我有一个使用 Nginx 和 PHP-FPM 的相对繁忙的 Web 服务器,在升级到 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,这使得总内存消耗(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 worker,这个可以配置pm.max_requests
选项。
从 500 开始,您拥有的最佳性能越多,但泄漏也越多。
推荐阅读
- javascript - Instagram ?__a=1 url 不在 WordPress 网站上显示用户图片
- camunda - Camunda-访问特定的 json 元素
- java - 数组之和问题。输出的答案和 calc 的答案存在差异
- list - 在游戏制作工作室中使用列表的问题
- javascript - ( Javascript ) Hash Map 或 Set 最好由 Const 或 Let 变量表示吗?
- visual-studio - 如何使用 Visual Studio SSRS 2017 在 CSV 导出中删除 BOM(字节顺序标记)
- maven - 在 maven settings.xml 中指定要在 Nexus 中部署的特定存储库 url
- android - 会话“应用程序”:安装未成功。无法安装应用程序:INSTALL_FAILED_INVALID_APK
- python-3.x - 如何在标志更改0到1python之前取3个值的平均值
- aws-glue - 使用手动创建的表运行时,AwS 粘合作业读取 0 个文件