在Linux下优化PHP-FPM(FastCGI Process Manager)的配置可以显著提高PHP应用程序的性能。以下是一些常见的优化建议:
PHP-FPM提供了多种进程管理方式,包括dynamic
、ondemand
和static
。默认情况下,PHP-FPM使用dynamic
模式。
pm = dynamic
pm.max_children
:最大子进程数。pm.start_servers
:启动时的子进程数。pm.min_spare_servers
:最小空闲子进程数。pm.max_spare_servers
:最大空闲子进程数。例如:
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm = ondemand
pm.process_idle_timeout
:进程空闲超时时间。例如:
pm = ondemand
pm.process_idle_timeout = 10s
pm = static
pm.max_children
:最大子进程数。pm.start_servers
:启动时的子进程数。pm.min_spare_servers
:最小空闲子进程数。pm.max_spare_servers
:最大空闲子进程数。例如:
pm = static
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
request_terminate_timeout:请求超时时间,防止长时间运行的脚本占用资源。
例如:
request_terminate_timeout = 30s
memory_limit:每个PHP进程的内存限制。
例如:
memory_limit = 128M
open_basedir:限制PHP脚本可以访问的文件目录。
例如:
open_basedir = /var/www/html/:/tmp/
slow_query_log:启用慢查询日志。
slow_query_log_file:慢查询日志文件路径。
long_query_time:慢查询时间阈值。
例如:
slow_query_log = 1
slow_query_log_file = /var/log/php-fpm/slow.log
long_query_time = 2
error_log:错误日志文件路径。
log_level:日志级别。
例如:
error_log = /var/log/php-fpm/error.log
log_level = notice
确保PHP-FPM进程有足够的文件描述符可用。
ulimit -n 65535
优化TCP参数以提高网络性能。
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.ip_local_port_range = 1024 65535
启用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
使用监控工具(如top
、htop
、php-fpm status
)来监控PHP-FPM的性能,并根据实际情况进行调优。
定期重启PHP-FPM可以释放内存并解决一些潜在的问题。
systemctl restart php-fpm
通过以上步骤,你可以显著提高PHP-FPM在Linux下的性能。请根据你的具体应用场景和硬件资源进行调整。