一、調整PHP-FPM進程池配置
進程池參數是影響PHP-FPM并發處理能力的核心。需根據服務器CPU核心數(nproc命令查看)和內存容量調整:
dynamic(動態調整)或ondemand(按需啟動),避免static(固定數量)導致資源浪費或不足。pm.max_children:最大子進程數,建議設為CPU核心數×4(如4核服務器設為16),避免過多進程占滿內存;pm.start_servers:啟動時的子進程數,設為pm.max_children的1/4~1/2(如16核設為4~8);pm.min_spare_servers/pm.max_spare_servers:空閑進程的最小/最大數量,保持合理范圍(如4~12),避免頻繁創建/銷毀進程的開銷。request_terminate_timeout(如30s),防止長時間運行的腳本(如死循環)占用進程資源。二、優化OPcache字節碼緩存
OPcache可緩存PHP腳本編譯后的字節碼,避免重復解析,顯著提升執行效率。需在php.ini中啟用并調整:
opcache.enable=1:開啟OPcache;opcache.memory_consumption=128:緩存內存大?。∕B),根據應用復雜度調整(如128MB~256MB);opcache.max_accelerated_files=4000:緩存文件數量,設為應用總PHP文件數的1.5倍(如1萬文件設為15000);opcache.revalidate_freq=60:緩存驗證頻率(秒),設為60秒(平衡性能與代碼更新及時性)。三、調整Linux系統內核參數
優化內核參數可提升系統并發處理能力,減少網絡和I/O瓶頸:
ulimit -n 65535臨時設置(重啟失效),或在/etc/security/limits.conf中永久添加* soft nofile 65535; * hard nofile 65535;/etc/sysctl.conf中添加:net.core.somaxconn = 65535 # 監聽隊列最大長度
net.ipv4.tcp_max_syn_backlog = 65535 # SYN隊列最大長度
net.ipv4.ip_local_port_range = 1024 65535 # 本地端口范圍
net.ipv4.tcp_tw_reuse = 1 # 復用TIME-WAIT連接
net.ipv4.tcp_fin_timeout = 30 # TIME-WAIT超時時間(秒)
執行sysctl -p使配置生效。四、優化Web服務器與PHP-FPM通信
選擇高效的通信方式可減少網絡開銷:
listen指令設為Unix socket(如listen = /run/php/php8.2-fpm.sock),相比TCP/IP通信,延遲更低、性能更好;fastcgi_keep_conn on;(啟用持久連接),減少TCP握手次數。五、啟用慢日志定位性能瓶頸
通過慢日志找出執行緩慢的腳本,針對性優化:
www.conf)中設置:slowlog = /var/log/php-fpm/slow.log # 慢日志路徑
request_slowlog_timeout = 2s # 超過2秒的請求記錄到慢日志
定期分析慢日志(如使用grep或專用工具),定位耗時操作(如復雜SQL查詢、循環嵌套)并優化。六、代碼與數據庫優化
SELECT語句的WHERE條件字段),避免全表掃描;使用預處理語句(如PDO的prepare方法)防止SQL注入,同時提升查詢效率;優化查詢語句(如避免SELECT *,只查詢所需字段)。七、系統級資源監控與維護
top(查看CPU/內存占用)、htop(可視化監控)、vmstat(查看系統整體性能)、php-fpm status(查看PHP-FPM進程狀態)等工具,實時監控資源使用情況;/var/log/php-fpm/下的舊日志),避免磁盤空間耗盡;