天天看點

eBPF監控工具bcc系列二性能問題定位 1.   階段一 2.   階段二

這裡将問題診斷分為兩個階段,第一階段是定性分析,第二階段是是用bcc進行定量分析。

1.  

階段一

在使用bcc工具前,先要進行基本的系統性能判斷,如下十個步驟,可以1到2分鐘之内觀測完畢。

相關腳本可以參考

https://github.com/kernel-z/LinuxProfiling

l   uptime

l   dmesg | tail

l   vmstat 1

l   mpstat -P ALL 1

l   pidstat 1

l  

iostat -xz 1

l   free -m

l   sar -n DEV 1

l   sar -n TCP,ETCP 1

l   top

發現問題之後,就進入到階段二。

2.  

階段二

階段二的相關工具位于bcc源碼中tools檔案夾中,如果安裝在自定義目錄就位于安裝目錄的tools檔案夾中。

            一般情況下載下傳階段中是能發現問題大體方向的,如果第一階段沒有發現任何情況,說明系統正常直接洗洗睡吧。如果發現問題肯定是專向的問題,例如是IO問題或者記憶體問題或者其他等等。

            1.活捉程序execsnoop,輸出如下:

#

./execsnoop.py

PCOMM            PID    PPID  

RET ARGS

dd               8841   1279    

0 /bin/dd if=/dev/zero of=test.bin bs=1 count=100000000

抓取目前活躍的程序。特别是一閃而過的短命程序,以及程序的傳回值和其參數。這個工具跟蹤了execute系統調用,在建立新程序的時候是fork->exec的,當exec時候就會被抓住,有些應用隻有fork沒有執行exec就不會被抓到。加上-x參數就可以抓到exec失敗的程序。參數-t可以列印出時間戳,-n參數可以進行名字過濾。參數-l可以識别程序的指定參數。

2.Opensnoop可以跟蹤應用工作時打開的檔案,資料檔案、日志檔案、配置檔案等,當企圖讀取不存在檔案時,可以快速發現。特别适用于發現應用的配置檔案。其中-p參數可以用于過濾PID,-T參數可以用于列印時間戳,-x參數可以列印失敗打開,-d參數表示設定跟蹤時間,-n參數可以進行名字過濾。

3.ext4slower (or

btrfs*, xfs*, zfs*)工具可以跟蹤ext4檔案系統并記錄通用操作,列印超過的門檻值。用于定位通過檔案系統的慢磁盤I/O。可以定位檔案系統延時是否超過了給定的門檻值。其檢測範圍是,從VFS接口到檔案系統結束,包括檔案系統鎖、運作隊列延時、CPU周期。除了ext4slower,現在已經有其他檔案系統的工具btrfsslower, xfsslower, and zfsslower,此外還有一個fileslower工作在VFS層,可以跟蹤所有事情,不過開銷較高。執行中直接加入參數例如ext4slower 1表示跟蹤ext4操作中超過1ms的操作,如果是0表示跟蹤所有操作,使用-j參數可以用逗号隔開輸出資訊,用于作為其他可視化工具的導入。

4.biolatency工具可以用來跟蹤磁盤I/O延時,當中止掉的時候會列印系統磁盤延時的柱狀圖。對iostat這種平均資料有很好的補充。其中-T參數表示間隔多久列印一次柱狀圖,-m參數使用毫秒機關,-Q參數表示請求放到核心隊列就開始,包含其隊列延時。預設是沒有-Q的,能反映裝置的IO性能,-D參數會列印每個磁盤的柱狀圖。

5.biosnoop工具列印每個磁盤IO的輸出,可以用于檢測每個磁盤IO,當磁盤壓力大的時候輸出會非常備援。

Cachestat工具每秒列印檔案系統緩存,可以确定命中率,用于調優。這裡的緩存是指頁高速高速緩存。-T參數表示輸出時間戳。

tcpconnect工具列印每個活躍的TCP連結。開銷很小,不會跟蹤每個包。

tcpaccept工具跟蹤核心監聽TCP套接字連結的函數,例如accept()。列印每個TCP被動連結,也能用于入侵檢測。工具隻會跟蹤成功調用accetp函數并進行TCP連接配接的,關閉端口的連結不會被顯示。

tcpretrans工具會列印每個TCP重發的包,TCP重發會導緻延時和吞吐量問題,要關注網絡的飽和度以及cpu使用率。函數相比tcpdump消耗很低,隻跟蹤retransmit函數。參數-c可以得到重發次數。

runqlat工具可以計算進在CPU隊列上的等待時間(也可以了解成是排程等待時間),并列印柱狀圖。在CPU飽和的時候可以用于計算在CPU 上等待時間。-m參數顯示毫秒,每隔多少間隔來輸出一個統計。-p參數來過濾PID,可以讓工具更加高效。使--pidnss選項可以用于列印每個PID命名空間,分析容器性能。

profile工具是一個CPU

profiler,每間隔時間進行堆棧采樣,列印堆棧。可以用來發現消耗CPU資源的代碼路徑。參數-p可以指定PID。使用-F 可以修改采樣頻率,還可以指定是使用者态-U和核心态-K。

https://github.com/iovisor/bcc/blob/master/docs/tutorial.md

經過以上bcc分析後,問題基本浮出水面,接下去就是解決吧。

祝大家玩的愉快。

繼續閱讀