溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Linux系統(tǒng)中如何進(jìn)行systemtap和火焰圖分析及安裝

發(fā)布時(shí)間:2022-01-24 10:30:52 來(lái)源:億速云 閱讀:210 作者:kk 欄目:開(kāi)發(fā)技術(shù)

Linux系統(tǒng)中如何進(jìn)行systemtap和火焰圖分析及安裝,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

SystemTap 是對(duì) Linux 內(nèi)核監(jiān)控和跟蹤的工具,它與DTrace 的老技術(shù)有有點(diǎn)相似,因?yàn)镾ystemTap 沒(méi)有使用工具構(gòu)建一個(gè)特殊的內(nèi)核,所以當(dāng)我們使用時(shí)允許我們動(dòng)態(tài)地安裝改工具。

1.1  環(huán)境檢測(cè)

安裝前我們需要檢測(cè)一下操作系統(tǒng)版本,命令如下:

# uname -r

3.10.0-327.el7.x86_64

# cat /etc/RedHat-release

CentOS Linux release 7.2.1511 (Core)

我這里使用的CentOS 7.2,下面的介紹的安裝方法也是在CentOS 上的方法。

1.2 安裝SystemTap

安裝部署SystemTap需要以下兩個(gè)包:

systemtap

systemtap-runtime

在root權(quán)限下,使用yum安裝,命令如下:

yum install systemtap systemtap-runtime

在使用SystemTap前,需要安裝內(nèi)核信息包,一般情況下,運(yùn)行如下命令安裝:

stap-prep

運(yùn)行命令后往往會(huì)失敗,安裝不成功,安裝失敗后可以手動(dòng)安裝內(nèi)核信息包。

我的服務(wù)器報(bào)的錯(cuò)誤如下:

 No package kernel-debuginfo-3.10.0-514.el7.x86_64 available.
 Error: Nothing to do
 Loaded plugins: fastestmirror, langpacks
 enabling epel-debuginfo
 Loading mirror speeds from cached hostfile
 Could not find debuginfo for main pkg: kernel-3.10.0-514.el7.x86_64
 No debuginfo packages available to install
 package kernel-debuginfo-3.10.0-514.el7.x86_64 is not installed
 problem installing rpm(s) kernel-debuginfo-3.10.0-514.el7.x86_64
1.3 手動(dòng)安裝內(nèi)核信息包

需要的安裝包如下:

kernel-debuginfo

kernel-debuginfo-common

kernel-devel

需要安裝與你內(nèi)核版本一致的安裝包,運(yùn)行命令查看版本:

# uname -r

3.10.0-327.el7.x86_64

可以指定你的內(nèi)核是 3.10.0-327.el7.x86_64,因此你需要的包如下:

kernel-debuginfo-3.10.0-514.el7.x86_64.rpm

kernel-debuginfo-common-x86_64-3.10.0-514.el7.x86_64.rpm

kernel-devel-3.10.0-514.el7.x86_64.rpm

重要?。。。∽⒁猓哼@三個(gè)包必須與你的內(nèi)核版本匹配,否則會(huì)安裝不成功。

下載這三個(gè) rpm 包,到 http://rpm.pbone.net 這個(gè)網(wǎng)站去下載。或者最簡(jiǎn)單的在 google 搜索包名。

分別安裝這三個(gè)包:

rpm -ivh kernel-debuginfo-common-x86_64-3.10.0-514.el7.x86_64.rpm

rpm -ivh kernel-debuginfo-3.10.0-514.el7.x86_64.rpm

rmp -ivh kernel-devel-3.10.0-514.el7.x86_64.rpm

也可以嘗試使用yum安裝,這里就不再贅述。

1.4  測(cè)試

測(cè)試一下是否安裝部署成功,如何測(cè)試呢?運(yùn)行如下命令:

stap -v -e ‘probe vfs.read {printf(“read performed\n”); exit()}’

部署失敗提示如下:

 # stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}'
 Pass 1: parsed user script and 119 library scripts using 220240virt/33264res/3272shr/30276data kb, in 320usr/20sys/717real ms.
 semantic error: while resolving probe point: identifier 'kernel' at /usr/share/systemtap/tapset/linux/vfs.stp:882:18
         source: probe vfs.read = kernel.function("vfs_read")
                                  ^
 
 semantic error: missing x86_64 kernel/module debuginfo [man warning::debuginfo] under '/lib/modules/3.10.0-514.el7.x86_64/build'
 
 semantic error: while resolving probe point: identifier 'vfs' at:1:7
         source: probe vfs.read {printf("read performed\n"); exit()}
                       ^
 
 semantic error: no match
 
 Pass 2: analyzed script: 0 probes, 0 functions, 0 embeds, 0 globals using 234228virt/47084res/5204shr/42164data kb, in 110usr/190sys/899real ms.
 Missing separate debuginfos, use: debuginfo-install kernel-3.10.0-514.el7.x86_64
 Pass 2: analysis failed.  [man error::pass2]

部署成功提示如下:

 # stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}'
 Pass 1: parsed user script and 119 library scripts using 220244virt/33264res/3272shr/30280data kb, in 360usr/30sys/530real ms.
 Pass 2: analyzed script: 1 probe, 1 function, 4 embeds, 0 globals using 351120virt/165268res/4472shr/161156data kb, in 1700usr/440sys/3951real ms.
 Pass 3: translated to C into "/tmp/stapeOM1BT/stap_bbe80ab58c56cba7fc7b6efecaadacb6_1647_src.c" using 351120virt/165564res/4768shr/161156data kb, in 10usr/50sys/63real ms.
 Pass 4: compiled C into "stap_bbe80ab58c56cba7fc7b6efecaadacb6_1647.ko" in 1880usr/490sys/4598real ms.
 Pass 5: starting run.
 read performed
 Pass 5: run completed in 10usr/40sys/406real ms.
二、火焰圖介紹及安裝
2.1 介紹

官網(wǎng):火焰圖(FlameGraphs)

火焰圖(Flame Graph)是由 Linux 性能優(yōu)化大師 Brendan Gregg 發(fā)明的。它是定位疑難雜癥的神器,比如 CPU 占用高、內(nèi)存泄漏等問(wèn)題。

縱向表示調(diào)用棧的深度,橫向表示消耗的時(shí)間。因?yàn)檎{(diào)用棧在橫向會(huì)按照字母排序,并且同樣的調(diào)用棧會(huì)做合并,所以,一個(gè)格子的寬度越大越說(shuō)明其可能是瓶頸。

綜上所述,主要就是看那些比較寬大的火苗,特別留意那些類似平頂山的火苗。

火焰圖例子:

Linux系統(tǒng)中如何進(jìn)行systemtap和火焰圖分析及安裝

2.2 安裝

火焰圖的安裝比較簡(jiǎn)單,只需要把腳本從github上down下來(lái)即可,命令如下:

git clone https://github.com/brendangregg/FlameGraph

2.3 生成火焰圖

生成火焰圖一般需要以下幾個(gè)步驟:

1)、抓取和捕獲堆棧信息:使用 perf/systemtap/dtrace 等工具抓取程序的運(yùn)行堆棧信息。

2)、折疊堆棧:使用FlameGraph 中的 stackcollapse 程序 把抓取的信息進(jìn)行分析組合;trace 工具抓取的系統(tǒng)和程序運(yùn)行每一時(shí)刻的堆棧信息, 需要對(duì)他們進(jìn)行分析組合, 將重復(fù)的堆棧累計(jì)在一起, 從而體現(xiàn)出負(fù)載和關(guān)鍵路徑

3)、生成火焰圖:使用FlameGraph中的flamegraph.pl 分析 stackcollapse 輸出的堆棧信息生成火焰圖

stackcollapse分很多工具,用來(lái)分析不同trace工具抓取的內(nèi)核信息,比如stackcollapse-stap.pl 是用來(lái)分析 SystemTap捕獲的信息。

三、使用

以具體的例子來(lái)說(shuō)明SystemTap和FlameGraph 是如何使用的。

3.1 sample_bt_vfs 工具

這個(gè)工具是openresty的作者春哥寫的,這個(gè)工具是在虛擬文件系統(tǒng)(VFS)之上采樣用戶空間調(diào)用棧,以便渲染出文件 I/O 火焰圖,這個(gè)火焰圖可以準(zhǔn)確的反映出在任意正在運(yùn)行的用戶進(jìn)程中,文件 I/O 數(shù)據(jù)量或者文件 I/O 延遲在不同的用戶空間代碼路徑的分布。

工具使用詳細(xì)介紹: sample_bt_vfs

工具包下載地址:openresty-systemtap-toolkit

方法:git  clone https://github.com/openresty/openresty-systemtap-toolkit.git

工具放在openresty-systemtap-toolkit目錄下

以查看nginx為例:

1)、使用SystemTap進(jìn)行內(nèi)核數(shù)據(jù)采集:

運(yùn)行:

 $ ./sample-bt-vfs -p 12345 -t 3 > a_vfs.log
 WARNING: Tracing 20636 (/opt/nginx/sbin/nginx)...
 WARNING: Time's up. Quitting now...(it may take a while)
 WARNING: Number of errors: 0, skipped probes: 2

參數(shù):

-p: 代表程序的PID

-t:代表要采集數(shù)據(jù)的時(shí)間

a_vfs.log: 是采集數(shù)據(jù)要保存的文件名子。

2)、分析組合采集的數(shù)據(jù)

運(yùn)行:

 $ ./FlameGraph/stackcollapse-stap.pl a_vfs.log > a_vfs.cbt

3)、生成火焰圖

運(yùn)行:

 $ ./FlameGraph/flamegraph.pl ./a_vfs.cbt > a_vfs.svg

這里有一個(gè) “文件 I/O 火焰圖” 的例子:

Linux系統(tǒng)中如何進(jìn)行systemtap和火焰圖分析及安裝

a_vfs.svg就是生成的火焰圖,使用瀏覽器打開(kāi),找到寬平的項(xiàng),就是比較耗時(shí)的。

3.2 sample-bt 工具

這個(gè)腳本可以對(duì)你指定的 任意 用戶進(jìn)程進(jìn)行調(diào)用棧的采樣。調(diào)用棧可以是用戶空間,可以是內(nèi)核空間,或者是兩者兼得。 它的輸出是匯總后的調(diào)用棧(按照總數(shù))。

工具詳細(xì)介紹:sample-bt

例如:

./openresty-systemtap-toolkit/sample-bt-vfs -p 41046 -t 50 -ku > 17_on_cpu.log

參數(shù):

-p:代表進(jìn)程ID

-t:代表采樣時(shí)間 單位是秒

-u 采集用戶空間調(diào)用棧信息

-k 采集內(nèi)核空間調(diào)用棧信息

剩下的火焰圖的生成方式同3.1。

什么是Linux系統(tǒng)

Linux是一種免費(fèi)使用和自由傳播的類UNIX操作系統(tǒng),是一個(gè)基于POSIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng),使用Linux能運(yùn)行主要的Unix工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。

看完上述內(nèi)容,你們掌握Linux系統(tǒng)中如何進(jìn)行systemtap和火焰圖分析及安裝的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI