什么學(xué)做網(wǎng)站深圳網(wǎng)絡(luò)營銷推廣外包
高延遲的 2 個(gè)場景,觸發(fā) perf 錄包思路
?當(dāng)前 perf 沒有常駐內(nèi)存,后續(xù)提供 perf 常駐內(nèi)存功能。且 perf 啟動(dòng)需要 0.5~1s,所以,存在 2 個(gè)場景
1.頻繁連續(xù)高延遲(復(fù)現(xiàn)后的幾秒內(nèi),繼續(xù)頻繁復(fù)現(xiàn)):可以配置自動(dòng)觸發(fā)工具,自動(dòng)觸發(fā) perf trace 記錄函數(shù)耗時(shí),或 perf record 記錄 cpu 火焰圖。
2.出現(xiàn)一次后,過好久才會(huì)復(fù)現(xiàn)第二次:需要一直開啟 perf trace 或 perf record,直到復(fù)現(xiàn)高延遲。(后續(xù) perf 常駐內(nèi)存后,可同場景 1,使用自動(dòng)觸發(fā)工具解決)
場景 1,配置高延遲自動(dòng)觸發(fā)工具去抓包
?
場景 2,使用 root 用戶,在 MAP 容器內(nèi)執(zhí)行如下命令,會(huì)一直抓包 6 小時(shí)。當(dāng)抓到包后,需要用戶手動(dòng)殺掉該進(jìn)程,停止抓包:
./trigger_perf_trace.sh loop
抓 perf trace 和 perf record 包腳本:
可以放到自己的目錄下,例如放到:/home/mogo/data/shizhonghe/trigger_perf_trace.sh
|
使用 perf trace 還是 perf record?
1. perf trace:? linux 內(nèi)核中存在一些埋點(diǎn),這些埋點(diǎn)會(huì)記錄內(nèi)核 api 的時(shí)延信息。睡眠時(shí)延高(死鎖了、io 操作多等),使用 perf trace 可以排查到
例如: perf trace 顯示工作線程 write 函數(shù)寫文件,耗時(shí) 30ms,此時(shí)說明寫文件卡住了 30ms,此時(shí)一般是同步寫文件了,需要改為異步寫文件
? ? ? ? ? ? perf trace 顯示工作線程中 futex wait 了 30ms,說明等待條件變量等待了 30ms
2.perf record 會(huì)對(duì) cpu 采樣,記錄單個(gè)進(jìn)程/多個(gè)進(jìn)程/MAP 容器所有進(jìn)程的, cpu 運(yùn)行的函數(shù)樣本,每個(gè)采樣點(diǎn)都是一個(gè)堆棧,采集一段時(shí)間后,會(huì)得到很多堆棧,可以把這些堆棧合并到一起,即:火焰圖
某個(gè)函數(shù)/進(jìn)程的 cpu 占用率 = 該函數(shù)/進(jìn)程的采樣點(diǎn)數(shù)量?÷?總采樣數(shù)量
如果某個(gè)模塊
?
使用 perf trace 抓到數(shù)據(jù)后,如何找到高耗時(shí) api
打印耗時(shí) > 20ms 的內(nèi)核 api
|