近期發現 PHP 運行自動載入類函數時頻繁出現超時現象,經由 PHP 慢查詢日誌追蹤,發現程式卡在 include 載入某個類文件時竟然觸發超時。初步定位為 I/O 響應超時,推測硬碟讀取存在效能瓶頸。
透過以下系統級工具進行深度排查:
iostat -d -x -k 1 10
連續執行 10 次觀察 await 與 svctm 參數:
sudo iotop -o
僅顯示正在進行 I/O 操作的進程,快速定位佔用磁碟帶寬的罪魁禍首。
sudo perf top
從內核層面分析 CPU 與 I/O 熱點,輔助判斷是否為系統調度問題。
sudo hdparm -t /dev/****
實測輸出:Timing buffered disk reads: 10 MB in 3.14 seconds = 3.18 MB/sec,顯著低於正常 SATA 硬碟的 100+ MB/sec 基準,確認硬碟讀取效率極低。
while true; do date; ps auxf | awk '{if($8=="D") print $0;}'; sleep 1; done
持續監控處於 D 狀態(不可中斷睡眠,通常等待 I/O)的進程,佐證 I/O 阻塞假設。
綜合上述指標,問題核心在於磁碟子系統效能嚴重退化。除上述診斷外,建議進一步檢查:
smartctl -a /dev/**** 排除壞道與硬體故障fsck 修復潛在邏輯損壞realpath_cache_size、減少不必要的 include_path 掃描若硬體無故障,可考慮將熱門類文件遷移至 SSD 或 tmpfs,或採用 Composer ClassMap 著載器減少文件系統統計呼叫。