在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
根據實際情況調整這些配置,以達到最佳性能。