PHP-FPM 配置文件位置与编辑
PHP-FPM 的主配置文件通常位于以下路径之一,具体取决于您的安装方式和操作系统:
- 源码编译安装:
/usr/local/php/etc/php-fpm.conf或/usr/local/php/etc/php-fpm.d/www.conf - 包管理器安装(如 apt/yum):
/etc/php/{version}/fpm/php-fpm.conf和/etc/php/{version}/fpm/pool.d/www.conf
您可以使用任何文本编辑器进行编辑,例如:
# 使用 vi 编辑主配置文件
vi /usr/local/php/etc/php-fpm.conf
# 或编辑进程池配置文件(更常见)
vi /usr/local/php/etc/php-fpm.d/www.conf
核心配置参数详解与优化建议
以下是对关键配置项的说明和优化建议。请根据您的服务器硬件(CPU、内存)和应用负载进行调整。
进程管理 (pm) 模式
这是影响性能和资源占用的最关键设置。
pm = dynamic(推荐):动态进程管理。子进程数量在最小和最大值之间浮动。pm = static:静态进程管理。固定数量的子进程,适合高流量、内存充足的服务器。pm = ondemand:按需启动进程。适合低流量或内存极度紧张的环境,但请求到来时会有启动延迟。
动态模式下的进程数设置
对于 pm = dynamic,需要设置以下参数:
pm.max_children = 50 # 最大子进程数。这是硬性限制,决定了 PHP-FPM 能创建的最大进程数。
pm.start_servers = 5 # 启动时创建的子进程数。
pm.min_spare_servers = 2 # 最小空闲进程数。当空闲进程少于这个数时,会创建新进程。
pm.max_spare_servers = 8 # 最大空闲进程数。当空闲进程多于这个数时,会结束多余进程。
计算建议:pm.max_children 的值主要受服务器内存限制。一个简单的估算公式为:
pm.max_children ≈ 服务器可用内存 / 单个 PHP 进程平均内存占用
例如,1GB 内存的服务器,如果单个 PHP 进程占用约 50MB,则理论上 pm.max_children 可设为 20。但需为系统和其他服务(如 Nginx、MySQL)预留内存,因此实际值应更小。
请求与超时设置
pm.max_requests = 500 # 每个子进程处理指定数量的请求后自动重启,有助于防止内存泄漏。
request_terminate_timeout = 30s # 单个请求的最大执行时间。如果经常遇到 502 错误,可适当调高(如 60s)。
request_slowlog_timeout = 10s # 慢请求日志阈值,超过此时间的请求会被记录到慢日志中。
slowlog = /var/log/php-fpm/$pool-slow.log # 慢日志路径。
监听与连接设置
# 方式一:使用 Unix Socket(推荐,同主机 Nginx+PHP-FPM 时性能更好)
listen = /run/php/php8.2-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
# 方式二:使用 TCP Socket(适用于 PHP-FPM 与 Nginx 不在同一主机的情况)
# listen = 127.0.0.1:9000
# listen.allowed_clients = 127.0.0.1 # 允许连接的 IP,TCP 方式下建议设置。
日志与状态监控
access.log = /var/log/php-fpm/$pool-access.log # 访问日志
slowlog = /var/log/php-fpm/$pool-slow.log # 慢日志
pm.status_path = /status # 启用状态页,可通过 URL(如 /status)查看 FPM 状态
ping.path = /ping # 健康检查端点
ping.response = pong
配置示例:1核1G云服务器优化
针对低配置云服务器(如 1 核 CPU,1GB 内存),以下是一个相对保守且稳定的配置示例,适用于中小型 WordPress 或 Laravel 应用。
; 进程管理
pm = dynamic
pm.max_children = 20 ; 最大进程数,根据内存估算
pm.start_servers = 4 ; 启动进程数
pm.min_spare_servers = 2 ; 最小空闲进程
pm.max_spare_servers = 6 ; 最大空闲进程
pm.max_requests = 500 ; 防止内存泄漏
; 监听设置(使用 Unix Socket 以提升性能)
listen = /run/php/php-fpm.sock
listen.owner = www
listen.group = www
listen.mode = 0660
; 用户和组
user = www
group = www
; 超时与日志
request_terminate_timeout = 30s ; 防止脚本长时间运行
request_slowlog_timeout = 5s ; 记录 5 秒以上的慢请求
slowlog = /var/log/php-fpm/slow.log
; 资源限制
rlimit_files = 4096 ; 提高文件打开数限制
rlimit_core = 0 ; 不生成核心转储文件
优化后检查与调试步骤
- 语法检查:修改配置后,运行
php-fpm -t测试配置文件语法是否正确。 - 重启服务:
systemctl restart php-fpm或service php-fpm restart。 - 查看状态:通过
systemctl status php-fpm查看服务状态,或访问配置的pm.status_path页面。 - 监控资源:使用
top,htop或glances命令监控内存和 CPU 使用情况,确保pm.max_children设置合理,不会导致内存耗尽。
通过以上配置和优化,您可以在 LNMP 环境中显著提升 PHP-FPM 的稳定性和性能。请务必根据实际负载情况进行微调。