在LNMP(Linux, Nginx, MySQL, PHP-FPM)架构中,优化PHP-FPM配置可以显著提高网站性能。以下是一些常见的优化建议:
PHP-FPM使用两种进程管理方式:static
和dynamic
。默认情况下,大多数系统使用dynamic
。
pm = static
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
pm.max_children
: 最大子进程数,根据服务器内存和PHP脚本的内存使用情况调整。pm.start_servers
: 启动时的子进程数。pm.min_spare_servers
: 最小空闲子进程数。pm.max_spare_servers
: 最大空闲子进程数。pm.max_requests
: 每个子进程在重启前处理的请求数,防止内存泄漏。request_terminate_timeout = 30s
这个设置可以防止长时间运行的PHP脚本占用资源。
slowlog = /var/log/php-fpm/slow.log
slowlog_timeout = 10s
这有助于识别和优化慢查询。
memory_limit = 128M
根据应用需求调整内存限制。
确保PHP-FPM配置中启用了OPcache,这可以显著提高PHP脚本的执行速度。
[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
catch_workers_output = yes
php_admin_value[error_log] = /var/log/php-fpm/error.log
php_admin_flag[log_errors] = on
确保错误日志记录详细信息,便于调试。
如果PHP-FPM和Nginx在同一台服务器上,使用Unix socket而不是TCP连接可以提高性能。
listen = /run/php/php7.4-fpm.sock
listen.owner = www-data
listen.group = www-data
process.priority = -10
根据需要调整进程优先级。
使用监控工具(如Prometheus和Grafana)来监控PHP-FPM的性能,并根据实际情况调整配置。
以下是一个示例的php-fpm.conf
文件:
[global]
daemonize = yes
pid = /run/php/php7.4-fpm.pid
error_log = /var/log/php-fpm/error.log
[www]
listen = /run/php/php7.4-fpm.sock
listen.owner = www-data
listen.group = www-data
user = www-data
group = www-data
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500
request_terminate_timeout = 30s
memory_limit = 128M
[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
根据实际情况调整这些配置,以达到最佳性能。