一、準備工作:啟用PHP-FPM狀態頁面與慢日志 在進行性能測試前,需先配置PHP-FPM的狀態監控與慢請求記錄,為后續分析提供基礎數據。
/etc/php/{version}/fpm/pool.d/www.conf),取消pm.status_path的注釋(如pm.status_path = /status),并確保Web服務器(如Nginx/Apache)配置了對該路徑的訪問權限(例如Nginx中添加location /status { fastcgi_pass unix:/run/php/php{version}-fpm.sock; include fastcgi_params; })。重啟PHP-FPM服務使配置生效。request_slowlog_timeout(如request_slowlog_timeout = 1s,記錄執行時間超過1秒的請求)和slowlog(如slowlog = /var/log/php-fpm/slow.log)參數。重啟PHP-FPM后,慢請求將被記錄到指定文件,便于定位性能瓶頸。二、使用壓力測試工具模擬負載 壓力測試是評估PHP-FPM性能的核心環節,通過模擬高并發請求,檢測其處理能力與資源消耗。
sudo apt install apache2-utils;基本用法:ab -n 100 -c 10 http://your_server_ip/info.php(-n表示總請求數,-c表示并發數)。結果中的Requests per second(每秒請求數)反映吞吐量,Time per request(平均請求時間)反映響應速度。sudo apt install wrk;基本用法:wrk -t12 -c400 -d30s http://your_server_ip/info.php(-t表示線程數,-c表示并發連接數,-d表示測試時長)。結果中的Requests/sec和Latency(延遲)是關鍵指標。三、實時監控系統資源與PHP-FPM進程 性能測試期間,需實時監控系統資源(CPU、內存、磁盤IO)及PHP-FPM進程的狀態,判斷是否存在資源瓶頸。
top/htop:實時顯示進程的CPU、內存使用率,按P鍵(top)或M鍵(htop)按CPU使用率排序,快速定位高消耗的PHP-FPM進程。ps aux | grep php-fpm:查看PHP-FPM進程的詳細信息(如CPU占用、內存占用、運行時間),過濾出異常進程。free -h:查看系統內存使用情況(總內存、已用內存、空閑內存、緩存),判斷是否因內存不足導致頻繁交換(swap)。vmstat 1:每秒輸出系統虛擬內存統計信息(如CPU使用率、內存使用率、IO等待時間、進程數),r列表示運行隊列長度(若持續大于CPU核心數,說明CPU瓶頸)。四、分析慢請求與性能瓶頸 通過慢日志與性能分析工具,定位PHP-FPM處理請求的慢原因,針對性優化。
tail -f /var/log/php-fpm/slow.log實時查看慢請求日志,記錄內容包括請求的腳本路徑、執行時間、數據庫查詢等。通過日志可快速識別出執行慢的腳本或查詢。php.ini(zend_extension=xdebug.so,開啟xdebug.mode=profile),通過IDE(如PHPStorm)查看分析結果。五、優化配置與重復測試 根據測試結果調整PHP-FPM配置與代碼,提升性能,然后重復測試驗證效果。
pm.max_children:根據服務器內存計算(如每個PHP-FPM進程占用100MB內存,服務器有2GB內存,則設置為20左右),避免進程數過多導致內存耗盡。pm.start_servers/pm.min_spare_servers/pm.max_spare_servers:根據并發請求數調整(如pm.start_servers = 5,pm.min_spare_servers = 3,pm.max_spare_servers = 10),保持足夠的空閑進程處理突發請求。pm.max_requests:設置每個子進程處理的最大請求數(如pm.max_requests = 1000),避免內存泄漏累積。php.ini,開啟OPcache(zend_extension=opcache.so,opcache.enable=1,opcache.memory_consumption=64),緩存預編譯的字節碼,減少重復編譯的開銷。array_merge為+運算符),降低CPU與內存消耗。