eBPF監控工具bcc系列二效能問題定位

2021-08-19 19:12:17 字數 2220 閱讀 4727

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

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

相關指令碼可以參考

lâ â  uptime

lâ â  dmesg | tail

lâ â  vmstat 1

lâ â  mpstat -p all 1

lâ â  pidstat 1

liostat -xz 1

lâ â  free -m

lâ â  sar -n dev 1

lâ â  sar -n tcp,etcp 1

lâ â  top

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

階段二的相關工具位於bcc原始碼中tools資料夾中,如果安裝在自定義目錄就位於安裝目錄的tools資料夾中。

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。

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

祝大家玩的愉快。

eBPF監控工具bcc系列五工具funccount

funccount函式可以通過匹配來跟蹤函式,tracepoints 或usdt探針。例如所有以vfs 開頭的核心函式。funccount vfs 這個對於探索核心 很有幫助,可以找出哪個函式在使用那個函式沒在使用。也可以設定間隔,每秒列印一次 funccount i 1 vfs 跟蹤所有tcp函式...

eBPF監控工具bcc系列五工具funccount

funccount函式可以通過匹配來跟蹤函式,tracepoints 或usdt探針。例如所有以vfs 開頭的核心函式。funccount vfs 這個對於探索核心 很有幫助,可以找出哪個函式在使用那個函式沒在使用。也可以設定間隔,每秒列印一次 funccount i 1 vfs 跟蹤所有tcp函式...

eBPF監控工具bcc系列三自定義工具trace

上篇中是通用的直接可用工具。trace工具可以指定跟蹤函式並顯示,可控制其輸出格式來顯示函式引數和返回值。例如跟蹤檔案擁有者的屬性更改,也就是跟蹤三個檔案系統呼叫chown,fchown,lchown。使用如下 trace.py p sys chown file s,to uid d,to gid ...