在Linux系统中,对PHP-FPM(FastCGI Process Manager)进行性能调优可以显著提高PHP应用程序的性能。以下是一些常见的调优步骤和建议:
PHP-FPM提供了多种进程管理方式,包括dynamic、ondemand和static。默认情况下,大多数系统使用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
编辑php.ini文件,调整以下参数:
memory_limit:每个PHP进程的内存限制。
max_execution_time:脚本的最大执行时间。
post_max_size:POST请求的最大大小。
upload_max_filesize:上传文件的最大大小。
opcache:启用OPcache可以显著提高PHP性能。
例如:
memory_limit = 128M
max_execution_time = 30
post_max_size = 8M
upload_max_filesize = 2M
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
调整Linux系统参数可以进一步优化PHP-FPM的性能。
文件描述符限制:
ulimit -n 65535
TCP参数:
编辑/etc/sysctl.conf文件,添加或修改以下参数:
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
然后运行:
sysctl -p
启用详细的日志记录和监控可以帮助你更好地了解PHP-FPM的性能瓶颈。
日志级别:
编辑php-fpm.conf或www.conf文件,调整日志级别:
catch_workers_output = yes
php_admin_value[error_log] = /var/log/php-fpm/error.log
php_admin_flag[log_errors] = on
监控工具:
使用top、htop、vmstat、iostat等工具监控系统资源使用情况。
使用php-fpm status命令查看PHP-FPM的状态。
对于高并发场景,可以考虑使用多个PHP-FPM池来分担负载。
php-fpm.conf或www.conf文件,添加新的池配置:[pool1]
listen = /run/php/php7.4-fpm1.sock
pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
[pool2]
listen = /run/php/php7.4-fpm2.sock
pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
通过以上步骤,你可以显著提高PHP-FPM的性能。根据具体的应用场景和需求,可能需要进一步调整和优化。