我正在尝试优化具有多个域的 VPS 上的 PHP-FPM 参数。每个域都配置了自己的用户/组,NGINX 使用不同的 PHP-FPM 套接字。对于每个域,我都配置了正确的用户/组。
我发现内存使用率太高,原因是 PHP-FPM 上的 children/server 参数配置错误。
各个站点的配置如下(仅相关部分):
pm = dynamic
pm.max_children = 6
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 300
配置了 11 个域,分配了 6 GB 的总 RAM。每个 PHP-FPM 实例的最大内存使用量应小于 64 MB(htop 显示最大使用量为 50 MB),最大使用量时我应该达到约 4 GB 的 RAM。
我认为我对 max_children 的限制太多了,如何才能找到最佳值?我想检查每个网站的实际点击量/天数将有助于找到这些值?我是否遗漏了一些 php-fpm“全局”参数?
编辑:
关于什么:
; The maximum number of processes FPM will fork. This has been design to control
; the global number of processes when using dynamic PM within a lot of pools.
; Use it with caution.
; Note: A value of 0 indicates no limit
; Default Value: 0
; process.max = 128
在 /etc/php-fpm.conf 中?考虑到服务器上的域数量,我可以增加 max_children 并对生成的全局进程添加限制,对吗?
答案1
机器正在交换吗?
您的子配置似乎还不错,只是有点过于保守。事实上,如果最大子配置 == 6,并且考虑到 11 个域,您应该使用最大 4224MiB RAM,这样您就根本不会接触交换。
还有一件事,孩子太少,而且:
pm.max_requests = 300
即使在流量较少的情况下,您也会生成和终止 PHP 进程,您是否怀疑您的 PHP 版本或托管的应用程序存在内存泄漏?
如果没有更多信息(例如 PHP 进程的平均内存消耗、php 脚本每秒的点击次数等),很难给出完整的答案。
另外,检查你的 swappines 设置
/proc/sys/vm/swappiness