php-fpm 配置文件pm.max_children 设置多大合适

本文探讨了php-fpm配置中pm.max_children和request_terminate_timeout参数的合理设置方法,根据服务器性能和业务需求,提供了具体的计算公式和推荐值,以实现PHP应用的最佳性能。

php-fpm 配置文件pm.max_children 设置多大合适

php-fpm.conf有两个至关重要的参数:

一个是”max_children”,另一个是”request_terminate_timeout”。

pm.max_children 表示 php-fpm 能启动的子进程的最大数量。

request_terminate_timeout 表示将执行时间太长的进程直接终止。

我的两个设置的值一个是”40″,一个是”900″,但是这个值不是通用的,而是需要自己计算的。

一、pm.max_children 多大合适?

这个值原则上是越大越好,php-cgi的进程多了就会处理的很快,排队的请求就会很少。

设置”max_children” 也需要根据服务器的性能进行设定。

计算方式如下:

一般来说一台服务器正常情况下每一个php-cgi所耗费的内存在20M~30M左右,因此我的”max_children”我设置成40个,20M*40=800M也就是说在峰值的时候所有PHP-CGI所耗内存在800M以内,低于我的有效内存2Gb。

而如果我 的”max_children”设置的较小,比如5-10个,那么php-cgi就会“很累“,处理速度也很慢,等待的时间也较长,占用的CPU也很高。

如果长时间没有得到处理的请求就会出现 504 Gateway Time-out 这个错误,而正在处理的很累的那几个php-cgi如果遇到了问题就会出现 502 Bad gateway 这个错误。

max_children较好的设置方式根据req/s(吞吐率,单位时间里服务器处理的最大请求数,单位req/s)来设置,若程序是 100 req/s 的处理能力,那么就设置 100比较好,这是动态来调整的。

二、request_terminate_timeout 多大合适?

计算方式如下:

如果你的服务器性能足够好,且宽带资源足够充足,PHP脚本没有循环或BUG的话你可以直接将”request_terminate_timeout”设 置成0s。0s的含义是让PHP-CGI一直执行下去而没有时间限制。

而如果你做不到这一点,也就是说你的PHP-CGI可能出现某个BUG,或者你的宽带不够充足或者其他的原因导致你的PHP-CGI能够假死那么就建议你给”request_terminate_timeout”赋一个值,这个值可以根 据你服务器的性能进行设定。

一般来说性能越好你可以设置越高,20分钟-30分钟都可以。由于我的服务器PHP脚本需要长时间运行,有的可能会超过10分钟因此我设置了900秒,这样不会导致PHP-CGI死掉而出现502 Bad gateway这个错误。

<think>我们面临的问题是在 `/etc/php-fpm.d/zabbix.conf` 配置文件中出现了未知配置项 `listen.acl_users`,导致 PHP-FPM 无法启动。根据错误日志,这个错误发生在配置文件的第7行。 ### 原因分析 1. **配置项错误**:`listen.acl_users` 可能是拼写错误,或者是该版本的 PHP-FPM 不支持这个配置项。 2. **版本兼容性**:不同版本的 PHP-FPM 支持的配置项有所不同。例如,在较早的 PHP 5.4 版本中,`listen.allowed_clients` 已被弃用[^4],而新版本可能使用不同的配置项。 3. **配置文件包含关系**:主配置文件 `/etc/php-fpm.conf` 包含 `/etc/php-fpm.d/` 目录下的所有配置文件,其中一个文件的错误会导致整个配置加载失败[^1]。 ### 解决方案 #### 步骤1:检查并修正配置项 打开配置文件: ```bash vim /etc/php-fpm.d/zabbix.conf ``` 找到第7行(根据错误提示),查看是否存在 `listen.acl_users` 配置项。考虑以下两种修正方式: **修正方案A(推荐)**: 将 `listen.acl_users` 替换为正确的配置项。根据 PHP-FPM 官方文档,控制访问权限的配置项通常是: - `listen.acl_users` 并不是标准配置项,正确的可能是 `listen.acl_groups` 或 `listen.acl_mask`。但更常见的是使用 `listen.allowed_clients`(在旧版本)或使用文件系统权限控制。 然而,在较新的 PHP 版本中(如 PHP 7.0+),访问控制通常通过 `listen.acl` 或 `listen.mode` 和 `listen.owner`/`listen.group` 来实现。如果您的 PHP 版本较旧(如 PHP 5.4),则可能不支持这些配置项。 如果您的本意是设置允许访问的客户端IP,那么正确的配置项是 `listen.allowed_clients`(但注意该配置项在 PHP 5.4 中已被弃用[^4])。例如: ```ini ; 允许的客户端IP(逗号分隔) listen.allowed_clients = 127.0.0.1 ``` **修正方案B(兼容旧版本)**: 如果您的 PHP 版本较旧(如 PHP 5.4),则建议完全移除该配置项,改为使用文件系统权限控制 Unix Socket 的访问。具体步骤: 1. 修改 `zabbix.conf` 中的 `listen` 指令,指定一个 Socket 文件: ```ini listen = /run/php-fpm/zabbix.sock ``` 2. 设置 Socket 文件的权限,使其仅允许特定用户/组访问: ```bash # 创建目录(如果不存在) mkdir -p /run/php-fpm chown nginx:zabbix /run/php-fpm/zabbix.sock # 根据实际用户修改 chmod 660 /run/php-fpm/zabbix.sock ``` 3. 在 Web 服务器(如 Nginx)配置中,设置 FastCGI 传递时使用该 Socket 并指定权限: ```nginx location ~ \.php$ { ... fastcgi_pass unix:/run/php-fpm/zabbix.sock; } ``` #### 步骤2:验证配置 在重启 PHP-FPM 之前,使用以下命令测试配置文件的正确性: ```bash php-fpm -t ``` 如果输出 `Configuration file is valid` 则表示配置正确。 #### 步骤3:重启 PHP-FPM ```bash systemctl restart php-fpm ``` #### 步骤4:检查服务状态 ```bash systemctl status php-fpm ``` ### 版本兼容性说明 - 如果您的 PHP 版本非常旧(如 PHP 5.4),建议升级到 PHP 7+ 版本,因为旧版本不仅缺少新特性,而且存在安全风险。 - 在升级 PHP 后,Zabbix 的配置可能需要调整,具体请参考 Zabbix 官方文档关于 PHP 要求的章节[^3]。 ### 相关问题 §§相关问题§§ 1. 如何查看当前系统中 PHP-FPM 的版本? 2. 在 Nginx 中如何配置 FastCGI 以使用 PHP-FPM 的 Unix Socket? 3. 升级 PHP 版本后,Zabbix 前端需要做哪些调整? </think>### 解决 PHP-FPM "unknown entry 'listen.acl_users'" 错误方案 #### 问题分析 根据错误日志和引用文档[^1][^2][^4],该问题通常由以下原因导致: 1. **配置项不兼容**:`listen.acl_users` 在旧版 PHP-FPM(如 PHP 5.4)中无效 2. **语法错误**:配置项拼写错误或位置不当 3. **版本差异**:新配置项在旧版 PHP 中不可用 #### 解决方案 ##### 步骤 1:修正配置项(推荐方案) 编辑 `/etc/php-fpm.d/zabbix.conf`: ```bash vim /etc/php-fpm.d/zabbix.conf ``` 修改错误配置项: ```diff - listen.acl_users = user1,user2 + ; 兼容替代方案(选择一种): + ; 方案1:使用标准配置项 + listen.owner = nginx + listen.group = nginx + + ; 方案2:使用旧版语法 + listen.mode = 0660 ``` ##### 步骤 2:替代访问控制方法 若需客户端访问控制,改用以下方式: ```ini ; 基于IP的访问控制(推荐) listen.allowed_clients = 127.0.0.1,192.168.1.0/24 ; 基于文件权限控制 listen.owner = apache listen.group = zabbix listen.mode = 0660 ``` ##### 步骤 3:验证并重启服务 ```bash # 测试配置文件 php-fpm -t # 完全停止进程(引用[2]方案) pkill -9 php-fpm # 重启服务 systemctl restart php-fpm # 验证状态 systemctl status php-fpm ``` #### 配置示例(兼容旧版 PHP) ```ini [zabbix] user = zabbix group = zabbix listen = /var/run/php-fpm/zabbix.sock listen.owner = nginx listen.group = zabbix listen.mode = 0660 ; 访问控制替代方案 listen.allowed_clients = 127.0.0.1 pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 2 pm.max_spare_servers = 8 ``` #### 关键说明 1. **版本兼容性**:`acl_users` 是 PHP 7.3+ 新增特性,旧版需用 `listen.mode` + 文件权限替代[^4] 2. **权限设置**:Socket 文件权限必须匹配 Web 服务器用户组 ```bash chown nginx:zabbix /var/run/php-fpm/zabbix.sock chmod 0660 /var/run/php-fpm/zabbix.sock ``` 3. **错误排查**:使用 `php-fpm -tt` 可显示详细配置错误位置[^2] #### 相关问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值