优化 PHP-FPM 配置文件可以显著提高 PHP 应用程序的性能和稳定性。以下是一些常见的优化建议,适用于大多数使用 PHP-FPM 的场景:
PHP-FPM 提供了多种进程管理器,包括 dynamic、ondemand 和 static。默认情况下,许多系统使用 dynamic,它会根据负载动态调整进程数量。
dynamic: 根据配置的最小和最大进程数自动调整。ondemand: 只在需要时启动进程,适合低流量网站。static: 固定数量的子进程,适用于高并发环境。推荐:对于大多数应用,dynamic 是一个平衡性能和资源使用的选择。但在高并发场景下,可以考虑 static 并适当增加进程数。
合理配置 PHP-FPM 的进程数量对于性能至关重要。主要参数包括:
pm.max_children: 最大子进程数。pm.start_servers: 启动时的服务器进程数。pm.min_spare_servers: 最小空闲服务器进程数。pm.max_spare_servers: 最大空闲服务器进程数。计算公式(适用于 dynamic 管理器):
pm.max_children = min(服务器内存 / 单个 PHP 进程内存, 系统最大文件描述符数 - 1) 示例配置(假设每个 PHP 进程占用 100MB 内存,服务器有 4GB 内存):
pm = dynamic pm.max_children = 40 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 pm.max_requests: 每个子进程在被重启前可以处理的请求数量。设置合理的值可以防止内存泄漏。示例:
pm.max_requests = 500 request_terminate_timeout: 设置脚本执行的最大时间,防止长时间运行的脚本占用资源。示例:
request_terminate_timeout = 30s OPCache 可以显著提高 PHP 的执行速度。确保在 php.ini 中启用了 OPCache,并根据需要调整其参数。
示例配置:
[opcache] zend_extension=opcache.so opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60 PHP-FPM 需要足够的文件描述符来处理并发连接。可以通过以下方式增加限制:
系统级别:编辑 /etc/security/limits.conf,添加如下内容:
* soft nofile 65535 * hard nofile 65535 PHP-FPM 配置:在 www.conf 中设置 rlimit_files:
rlimit_files = 65535 通过记录慢查询,可以识别和优化性能瓶颈。
示例配置:
slowlog = /var/log/php-fpm/slow.log request_slowlog_timeout = 10s 对于高并发环境,使用 TCP 连接可能比 Unix 套接字更高效,尤其是在负载均衡器后。
示例配置:
listen = 127.0.0.1:9000 使用监控工具(如 Prometheus、Grafana、New Relic 等)实时监控 PHP-FPM 的性能指标,包括请求处理时间、内存使用、进程状态等,根据监控数据持续优化配置。
pdo_mysql.persistent)等。www.conf 配置; Start a new pool named 'www' [www] ; Listen to port 9000 on all network interfaces listen = 127.0.0.1:9000 ; Set process manager to dynamic pm = dynamic ; Maximum number of child processes pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35 ; Maximum number of requests per child before restart pm.max_requests = 500 ; Set request timeout to 30 seconds request_terminate_timeout = 30s ; Enable OPCache [opcache] zend_extension=opcache.so opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.revalidate_freq=60 ; Enable slow log slowlog = /var/log/php-fpm/slow.log request_slowlog_timeout = 10s ; Increase file descriptor limit rlimit_files = 65535 优化 PHP-FPM 配置需要根据具体的应用场景和服务器资源进行调整。建议逐步实施上述优化措施,并通过监控工具观察性能变化,以确保最佳的性能和稳定性。