内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

Linux系統(tǒng)性能監(jiān)控分析工具perf-創(chuàng)新互聯(lián)

文章目錄
  • 一、perf 工具下載
      • 1.在centos7下離線安裝
      • 2.安裝flex
      • 3.安裝bison
  • 二、設(shè)置環(huán)境變量
  • 三、用MobaXterm 在linux和windows之間上傳/下載文件
      • 1.連接服務(wù)器
      • 2.上傳文件
      • 3.下載
  • 四、perf原理
      • 1.perf的使用
      • 2.perf簡單介紹
      • 3.常用命令格式
        • 1.perf list
        • 2.perf top
        • 3.perf stat
        • 4.perf probe
        • 5.perf lock
        • 6.perf mem
        • 7.perf sched
        • 8.perf annotate

創(chuàng)新互聯(lián)公司主打移動網(wǎng)站、成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、網(wǎng)站改版、網(wǎng)絡(luò)推廣、網(wǎng)站維護(hù)、主機(jī)域名、等互聯(lián)網(wǎng)信息服務(wù),為各行業(yè)提供服務(wù)。在技術(shù)實(shí)力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務(wù),根據(jù)網(wǎng)站的內(nèi)容與功能再決定采用什么樣的設(shè)計。最后,要實(shí)現(xiàn)符合網(wǎng)站需求的內(nèi)容、功能與設(shè)計,我們還會規(guī)劃穩(wěn)定安全的技術(shù)方案做保障。一、perf 工具下載
  • 系統(tǒng)級性能優(yōu)化通常包括兩個階段:性能剖析(performance profiling)和代碼優(yōu)化。

  • 性能剖析的目標(biāo)是尋找性能瓶頸,查找引發(fā)性能問題的原因及熱點(diǎn)代碼。

  • 代碼優(yōu)化的目標(biāo)是針對具體性能問題而優(yōu)化代碼或編譯選項(xiàng),以改善軟件性能。

  • 在性能剖析階段,需要借助于現(xiàn)有的profiling工具,如perf等。在代碼優(yōu)化階段往往需要借助開發(fā)者的經(jīng)驗(yàn),編寫簡潔高效的代碼,甚至在匯編級別合理使用各種指令,合理安排各種指令的執(zhí)行順序。

  • perf是一款Linux性能分析工具。Linux性能計數(shù)器是一個新的基于內(nèi)核的子系統(tǒng),它提供一個性能分析框架,比如硬件(CPU、PMU(Performance Monitoring Unit))功能和軟件(軟件計數(shù)器、tracepoint)功能。

  • 通過perf,應(yīng)用程序可以利用PMU、tracepoint和內(nèi)核中的計數(shù)器來進(jìn)行性能統(tǒng)計。它不但可以分析制定應(yīng)用程序的性能問題(per thread),也可以用來分析內(nèi)核的性能問題,當(dāng)然也可以同事分析應(yīng)用程序和內(nèi)核,從而全面理解應(yīng)用程序中的性能瓶頸。

  • 使用perf,可以分析程序運(yùn)行期間發(fā)生的硬件事件,比如instructions retired、processor clock cycles等;也可以分析軟件時間,比如page fault和進(jìn)程切換。

perf是一款綜合性分析工具,大到系統(tǒng)全局性性能,再小到進(jìn)程線程級別,甚至到函數(shù)及匯編級別。
perf工具

1.在centos7下離線安裝
tar -xvf perf-5.9.0.tar.gz 
cd perf-5.9.0
cd tools/perf/
make
sudo cp perf /usr/local/bin

其中安裝會出現(xiàn)以下問題:

2.安裝flex
Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h'
Warning: Kernel ABI header at 'tools/include/uapi/linux/kvm.h' differs from latest version at 'include/uapi/linux/kvm.h'
Warning: Kernel ABI header at 'tools/include/uapi/linux/prctl.h' differs from latest version at 'include/uapi/linux/prctl.h'
Warning: Kernel ABI header at 'tools/arch/x86/include/asm/disabled-features.h' differs from latest version at 'arch/x86/include/asm/disabled-features.h'
Warning: Kernel ABI header at 'tools/arch/x86/include/asm/cpufeatures.h' differs from latest version at 'arch/x86/include/asm/cpufeatures.h'
Warning: Kernel ABI header at 'tools/arch/x86/include/uapi/asm/kvm.h' differs from latest version at 'arch/x86/include/uapi/asm/kvm.h'
Warning: Kernel ABI header at 'tools/arch/powerpc/include/uapi/asm/kvm.h' differs from latest version at 'arch/powerpc/include/uapi/asm/kvm.h'
Warning: Kernel ABI header at 'tools/arch/s390/include/uapi/asm/kvm.h' differs from latest version at 'arch/s390/include/uapi/asm/kvm.h'
Makefile.config:137: *** Error: flex is missing on this system, please install it.  Stop.
Makefile.perf:203: recipe for target 'sub-make' failed
make[1]: *** [sub-make] Error 2
Makefile:69: recipe for target 'all' failed
make: *** [all] Error 2

flex如果不安裝,后面在編譯的時候,會出現(xiàn)信賴報錯。

flex安裝命令:

yum install flex -y
3.安裝bison

bison如果沒有安裝,會報以下錯誤。

BUILD:   Doing 'make -j4' parallel build
Warning: Kernel ABI header at 'tools/include/uapi/drm/i915_drm.h' differs from latest version at 'include/uapi/drm/i915_drm.h'
Warning: Kernel ABI header at 'tools/include/uapi/linux/kvm.h' differs from latest version at 'include/uapi/linux/kvm.h'
Warning: Kernel ABI header at 'tools/include/uapi/linux/prctl.h' differs from latest version at 'include/uapi/linux/prctl.h'
Warning: Kernel ABI header at 'tools/arch/x86/include/asm/disabled-features.h' differs from latest version at 'arch/x86/include/asm/disabled-features.h'
Warning: Kernel ABI header at 'tools/arch/x86/include/asm/cpufeatures.h' differs from latest version at 'arch/x86/include/asm/cpufeatures.h'
Warning: Kernel ABI header at 'tools/arch/x86/include/uapi/asm/kvm.h' differs from latest version at 'arch/x86/include/uapi/asm/kvm.h'
Warning: Kernel ABI header at 'tools/arch/powerpc/include/uapi/asm/kvm.h' differs from latest version at 'arch/powerpc/include/uapi/asm/kvm.h'
Warning: Kernel ABI header at 'tools/arch/s390/include/uapi/asm/kvm.h' differs from latest version at 'arch/s390/include/uapi/asm/kvm.h'
Makefile.config:141: *** Error: bison is missing on this system, please install it.  Stop.
Makefile.perf:203: recipe for target 'sub-make' failed
make[1]: *** [sub-make] Error 2
Makefile:69: recipe for target 'all' failed
make: *** [all] Error 2

安裝命令:

yum install bison -y
二、設(shè)置環(huán)境變量

永久生效我們普通用戶一般在 ~/.bashrc 或者 ~/.bash_profile 添加就可以了,不要往 /etc/bashrc 里添加。注意:以 . 開頭的文件時隱藏文件。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

三、用MobaXterm 在linux和windows之間上傳/下載文件

MobaXterm實(shí)現(xiàn)linux和windows之間傳輸文件的具體步驟,以下就是具體的操作教程:

下載軟件路徑:
MobaXterm

可以選擇免安裝版(我已經(jīng)試過非常好用,免費(fèi)哦?。?br />在這里插入圖片描述
注意:我測試的centos服務(wù)器是在某某云上購買的遠(yuǎn)程服務(wù)器。不是虛擬機(jī)。

1.連接服務(wù)器

打開MobaXterm客戶端。
在這里插入圖片描述
點(diǎn)擊session列表,或者直接點(diǎn)擊“Start local terminal”。然后輸入:ssh root@ -p。

@前面是登錄用戶名,@后面是ip地址。-p后面跟地是密碼。

在這里插入圖片描述
彈出來提示,輸入密碼,確認(rèn)后登錄linux服務(wù)。在左側(cè)可以看到服務(wù)器的文件列表。
在這里插入圖片描述

2.上傳文件

在地址欄輸入,要上傳到的目錄位置。例如:上傳到/root/.config/下面。在地址欄的位置輸入:/root/.config/,點(diǎn)擊回車跳轉(zhuǎn)到該目錄下。
在這里插入圖片描述
如圖,點(diǎn)擊上傳按鈕?;蛴益I選擇“upload to current folder”。
在這里插入圖片描述
在這里插入圖片描述

3.下載

在服務(wù)器點(diǎn)擊選擇要下載的文件或目錄。點(diǎn)擊下載按鈕,或右鍵點(diǎn)擊文件/目錄,選擇“download”。
在這里插入圖片描述

四、perf原理
  • 通過設(shè)置一個定時器,定時器的觸發(fā)時間可以由用戶設(shè)定。
  • 定時器被觸發(fā)后,將會調(diào)用采集函數(shù)收集當(dāng)前運(yùn)行環(huán)境的數(shù)據(jù)(如當(dāng)前正在執(zhí)行的進(jìn)程和函數(shù)等)。
  • 將采集到的數(shù)據(jù)寫入到一個環(huán)形緩沖區(qū)(ring buffer)中。
  • 應(yīng)用層可以通過內(nèi)存映射來讀取環(huán)形緩沖區(qū)中的采樣數(shù)據(jù)。

在這里插入圖片描述

trace的跟蹤方法是一種總體跟蹤法,換句話說,你統(tǒng)計了一個事件到下一個事件所有的時間長度,然后把它們放到時間軸上,你可以知道整個系統(tǒng)運(yùn)行在時間軸上的分布。

這種方法很準(zhǔn)確,但跟蹤成本很高。所以,我們也需要一種抽樣形態(tài)的跟蹤方法。perf提供的就是這樣的跟蹤方法。

perf的原理是這樣的:每隔一個固定的時間,就在CPU上(每個核上都有)產(chǎn)生一個中斷,在中斷上看看,當(dāng)前是哪個pid,哪個函數(shù),然后給對應(yīng)的pid和函數(shù)加一個統(tǒng)計值,這樣,我們就知道CPU有百分幾的時間在某個pid,或者某個函數(shù)上了。這個原理圖示如下:
在這里插入圖片描述

很明顯可以看出,這是一種采樣的模式,我們預(yù)期,運(yùn)行時間越多的函數(shù),被時鐘中斷擊中的機(jī)會越大,從而推測,那個函數(shù)(或者pid等)的CPU占用率就越高。

當(dāng)然,如果某個進(jìn)程運(yùn)氣特別好,它每次都剛好躲過你發(fā)起探測的位置,你的統(tǒng)計結(jié)果可能就完全是錯的了。這是所有采樣統(tǒng)計都有可能遇到的問題了。

1.perf的使用

perf --help之后可以看到perf的二級命令。

在這里插入圖片描述
全局性概況:

perf list查看當(dāng)前系統(tǒng)支持的性能事件;
perf bench對系統(tǒng)性能進(jìn)行摸底;
perf test對系統(tǒng)進(jìn)行健全性測試;
perf stat對全局性能進(jìn)行統(tǒng)計;

全局細(xì)節(jié):

perf top可以實(shí)時查看當(dāng)前系統(tǒng)進(jìn)程函數(shù)占用率情況;
perf probe可以自定義動態(tài)事件;

特定功能分析:

perf kmem針對slab子系統(tǒng)性能分析;
perf kvm針對kvm虛擬化分析;
perf lock分析鎖性能;
perf mem分析內(nèi)存slab性能;
perf sched分析內(nèi)核調(diào)度器性能;
perf trace記錄系統(tǒng)調(diào)用軌跡;

最常用功能perf record,可以系統(tǒng)全局,也可以具體到某個進(jìn)程,更甚具體到某一進(jìn)程某一事件;可宏觀,也可以很微觀:

pref record記錄信息到perf.data;
perf report生成報告;
perf diff對兩個記錄進(jìn)行diff;
perf evlist列出記錄的性能事件;
perf annotate顯示perf.data函數(shù)代碼;
perf archive將相關(guān)符號打包,方便在其它機(jī)器進(jìn)行分析;
perf script將perf.data輸出可讀性文本;

可視化工具perf timechart:

perf timechart record記錄事件;
perf timechart生成output.svg文檔;

2.perf簡單介紹

執(zhí)行perf --help命令我們可以看到其支持的一堆子命令:
在這里插入圖片描述

我們可以看到其中很多命令都是非常常用的,比如record(report/script),top,stat等等,尤其是top,甚至可以看到匯編級別的熱代碼,是十分牛逼的一個分析工具。這些子命令也分別擁有自己的help命令。可以看到perf本身提供的文檔并不多,更詳細(xì)的文檔在源碼的tools/perf/Documentation中。

perf本身的原理也非常有意思,其把事件源視為perf_event,并分為task和CPU兩個維度進(jìn)行事件觸發(fā),本身支持counting,sampling以及bpf作為事件的處理流程。事件源類型(不是機(jī)制)被分為Hardware Events,Software Events,Tracepoint,USDT以及Timed Profiling。

bpfTrace內(nèi)部也是可以基于perf_event機(jī)制去做事件源的:
在這里插入圖片描述
這篇文章先枚舉幾個基本但使用方法,然后分別介紹不同的事件類型與簡單原理,最后進(jìn)行總結(jié)。

3.常用命令格式

這一章節(jié)主要是列舉一些常用的perf子命令,這些都可以應(yīng)用到我們平時的排錯過程中。

我們介紹幾個比較有意思的perf命令,并簡單實(shí)操下這幾個命令,感受下這個神器的威力。

首先執(zhí)行sudo perf list ‘:’ | less,查看所有支持的Tracepoint Event。

1.perf list

然后可以執(zhí)行sudo perf record -e ‘sched:sched_switch’ -ag:

這個命令對sched:sched_switch進(jìn)行檢測,并對數(shù)據(jù)進(jìn)行聚合,-a對意思是對所有CPU都進(jìn)行數(shù)據(jù)采集,-g對意思收集棧幀對消息,最后把數(shù)據(jù)輸出到perf.data文件中。

然后執(zhí)行sudo perf report,即可以查看perf.data文件,因?yàn)槲覀兗恿?g,所以可以看到每一項(xiàng)數(shù)據(jù)的棧幀。

2.perf top

首先我們可以隨意啟動一個進(jìn)程,這里我啟動一個redis實(shí)例,找到其進(jìn)程號然后執(zhí)行sudo perf top -p 23981 -F 300HZ,這個指令的意思是300HZ就執(zhí)行一個CPU-lock事件,查找進(jìn)程23981的調(diào)用信息。然后我們就可以看到一個調(diào)用頻率的排行,用方向鍵和回車可以查看一個事件的詳細(xì)信息,甚至可以看到匯編級別的熱代碼。
在這里插入圖片描述

3.perf stat

最經(jīng)典的計數(shù)命令當(dāng)然也不能少,我們可以執(zhí)行如下命令sudo perf stat -e ‘sched:*’ -p 23981 sleep 10,可以查看被監(jiān)控事件的counter數(shù)據(jù)。
在這里插入圖片描述

4.perf probe

好了,現(xiàn)在我們用的一直都是pre-defined的事件,現(xiàn)在我們來嘗試動態(tài)加入一個Tracepoint,執(zhí)行如下命令sudo perf probe --add udp_sendmsg,這樣我們就在udp_sendmsg中埋上了點(diǎn):
在這里插入圖片描述
我們可以執(zhí)行如下指令查看對于指定probe來說有效的局部變量perf probe -V udp_sendmsg:
在這里插入圖片描述
我們可以檢測某個局部變量sudo perf probe --add ‘udp_sendmsg len’ -f,因?yàn)榍懊嬗型膒robe,需要加-f。然后執(zhí)行sudo perf record -e probe:udp_sendmsg_1 -a采集數(shù)據(jù),最后執(zhí)行sudo perf report,可以看到len的值。我遇到的問題是report中的值都是十六進(jìn)制數(shù),也就是調(diào)試信息沒有找到。

在內(nèi)核的代碼中查看Makefile,可以看到在定義了CONFIG_FRAME_POINTER和CONFIG_DEBUG_INFO時才會加載調(diào)試信息:

在這里插入圖片描述
既然沒有,說明編譯內(nèi)核的時候沒有對應(yīng)的調(diào)試信息,而且/proc/kallsyms文件大小也為零。

那理論我們使用kernel-debuginfo包就可以解決問題。yum下載以后可以執(zhí)行sudo find / -name "kernel-debuginfo"找到包的下載路徑,然后執(zhí)行record --vmlinux=path,然后發(fā)現(xiàn)好像不是這么用的,找到[15]修改了vmlinux的參數(shù)為/boot下的文件,發(fā)現(xiàn)還是沒有辦法解決問題。

奇了大怪,到底該怎么找到調(diào)試符號呢,可能重新編譯內(nèi)核,加上調(diào)試信息就可以吧(但其他但perf信息就可以看到內(nèi)核但堆棧信息,所以應(yīng)該是操作問題)。事實(shí)上到現(xiàn)在我還是沒有解決這個問題。

5.perf lock

我們可以檢測鎖的各種信息,但是需要CONFIG_LOCKDEP和CONFIG_LOCK_STAT編譯選項(xiàng)的開啟,執(zhí)行如下指令perf lock record ls,然后執(zhí)行perf lock report,就可以看到詳細(xì)的信息。相比之SystemTap/bpfTrace就什么也不需要,直接就可以采集到perf可以采集到的所有數(shù)據(jù),但是需要腳本編寫者自身對內(nèi)核代碼有所了解。

我的機(jī)器編譯時沒有開這個:
在這里插入圖片描述

6.perf mem

我們可以檢測內(nèi)核中的內(nèi)存分配情況,首先執(zhí)行sudo perf kmem record ls,然后執(zhí)行sudo perf kmem stat --caller --alloc,就可以看到內(nèi)核中內(nèi)存分配的信息了:
在這里插入圖片描述

  • Callsite:內(nèi)核代碼中調(diào)用kmalloc和kfree的地方。
  • Total_alloc/Per:總共分配的內(nèi)存大小,平均每次分配的內(nèi)存大小。
  • Total_req/Per:總共請求的內(nèi)存大小,平均每次請求的內(nèi)存大小。
  • Hit:調(diào)用的次數(shù)。
  • Ping-pong:kmalloc和kfree不被同一個CPU執(zhí)行時的次數(shù),這會導(dǎo)致cache效率降低。
  • Frag:碎片所占的百分比,碎片 = 分配的內(nèi)存 - 請求的內(nèi)存,這部分是浪費(fèi)的。
7.perf sched

我們也可以查看調(diào)度相關(guān)的事件,執(zhí)行如下命令sudo perf sched record -p 23981,然后執(zhí)行sudo perf report latency就可以查看一些調(diào)度屬性。

因?yàn)槭钦{(diào)度相關(guān),先給redis benchmark上,執(zhí)行./redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 1000000,然后執(zhí)行第一個命令,一兩秒就累計了600MB的數(shù)據(jù),然后執(zhí)行第二個命令,我們可以看到如下輸出:
在這里插入圖片描述
然后調(diào)用sudo perf sched script,我們就可以知道這個最高的時延發(fā)生的原因是什么:
在這里插入圖片描述
還有一個子命令非常有意思,就是sudo perf sched map,這可以用圖表的方式來查看不同CPU核上任務(wù)的轉(zhuǎn)移情況,這種情況下顯然前面監(jiān)控redis的perf.data就不太適合作為例子了,因?yàn)榻^大多數(shù)情況redis實(shí)例都是在一個核上跑的,我們先執(zhí)行:sudo perf sched record – sleep 1,再執(zhí)行sudo perf sched map,可以看到類似這樣的輸出:
在這里插入圖片描述
其中類似A0,B0,C0這樣的標(biāo)識符代表了一個任務(wù),然后*代表CPU剛剛調(diào)度一個事件,.代表此CPU目前空閑,這種分析可以很好的觀測當(dāng)前系統(tǒng)中任務(wù)切換的情況。但是我認(rèn)為能解決的問題有限,還是latecny搭配script實(shí)用一點(diǎn)。

8.perf annotate

奇怪的一個子命令,這個命令可以看到所監(jiān)控事件部分的高級語言代碼和匯編,但是打印出來好像也沒啥用,我發(fā)現(xiàn)不管去觀察哪一個pref.data,總會有一句匯編是百分百的命中率,如果能夠看到這個命令每句指令的命中情況的話就很棒了:
在這里插入圖片描述

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站題目:Linux系統(tǒng)性能監(jiān)控分析工具perf-創(chuàng)新互聯(lián)
鏈接分享:http://m.rwnh.cn/article0/iehio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、網(wǎng)頁設(shè)計公司、網(wǎng)站排名域名注冊、搜索引擎優(yōu)化Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
景谷| 左贡县| 凤山市| 敦煌市| 临沧市| 邯郸市| 利川市| 临海市| 宁城县| 达尔| 沙河市| 邵东县| 瑞丽市| 商南县| 汉沽区| 泰兴市| 石渠县| 文化| 泸溪县| 溧阳市| 皋兰县| 英吉沙县| 齐齐哈尔市| 新余市| 克什克腾旗| 余姚市| 芮城县| 德庆县| 无锡市| 古丈县| 沭阳县| 米脂县| 砀山县| 涟源市| 萍乡市| 府谷县| 青铜峡市| 修文县| 大理市| 乐业县| 图们市|