在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下的性能。請根據你的具體應用場景和硬件資源進行調整。