最近發(fā)現(xiàn),php運(yùn)行自動(dòng)加載類函數(shù)時(shí)總是超時(shí),跟蹤php慢查詢?nèi)罩?,發(fā)現(xiàn)程序卡在了include某個(gè)類文件時(shí)竟然超時(shí)。
初步定位是io響應(yīng)超時(shí),硬盤(pán)讀取有問(wèn)題。
通過(guò)幾個(gè)命令來(lái)定位:
iostat -d -x -k 1 10 // 運(yùn)行10次查看iostat中wait參數(shù)很大,一般不超過(guò)5ms,await svctm這2個(gè)參數(shù)越接近,io性能越好。
參考別的博客,
await: 每一個(gè)IO請(qǐng)求的處理的平均時(shí)間(單位是微秒毫秒)。這里可以理解為IO的響應(yīng)時(shí)間,一般地系統(tǒng)IO響應(yīng)時(shí)間應(yīng)該低于5ms,如果大于10ms就比較大了。
這個(gè)時(shí)間包括了隊(duì)列時(shí)間和服務(wù)時(shí)間,也就是說(shuō),一般情況下,await大于svctm,它們的差值越小,則說(shuō)明隊(duì)列時(shí)間越短,反之差值越大,隊(duì)列時(shí)間越長(zhǎng),說(shuō)明系統(tǒng)出了問(wèn)題。svctm 表示平均每次設(shè)備I/O操作的服務(wù)時(shí)間(以毫秒為單位)。如果svctm的值與await很接近,表示幾乎沒(méi)有I/O等待,磁盤(pán)性能很好,如果await的值遠(yuǎn)高于svctm的值,則表示I/O隊(duì)列等待太長(zhǎng), 系統(tǒng)上運(yùn)行的應(yīng)用程序?qū)⒆兟?/P>
sudo iotop -o , // 查看在劃硬盤(pán)的程序,查看進(jìn)程io占用比例
sudo perf top // 查看進(jìn)程io占用比例
sudo hdparm -t /dev/**** 查看磁盤(pán)讀取效率
顯示: Timing buffered disk reads: 10 MB in 3.14 seconds = 3.18 MB/sec
查看非中斷睡眠
while true; do date; ps auxf | awk '{if($8=="D") print $0;}'; sleep 1; done
通過(guò)上述命令跟蹤后,硬盤(pán)讀取效率很低,進(jìn)一步原因,還不得而知,猜想可能是硬盤(pán)有壞道。
更多信息請(qǐng)查看IT技術(shù)專欄
2025國(guó)考·省考課程試聽(tīng)報(bào)名