在OR項目中使用火焰圖

火焰圖介紹

看到openresty裏用火焰圖以爲挺有意思的,又裝逼又有用。它能夠快速的定位到程序性能的瓶頸,生成程序的調用棧而且計算調用棧中每部分的 CPU 消耗,可以比較容易的找到CPU佔用高、內存泄漏等問題。今天在本身之前的項目中測試了下,下面貼個圖留個記念。
![圖片描述nginx

這裏面不要看顏色,由於顏色是隨機搞來的,沒有任何意義。要看火焰山上縱向的高度和每一個對應的長度。縱向的高度表明函數調用棧的深度,橫向長度表明此函數執行佔用CPU的比例。git

下面來了解下火焰圖工具如何安裝。github

火焰圖安裝

參考 http://kernelmaker.github.io/...svg

安裝systemtap

其實主要就是安裝內核探測工具 systemtap。(SystemTap 經過將腳本語句翻譯成C語句,編譯成內核模塊。模塊加載以後,依據時間處理機制來收集有關正在運行的Linux系統的信息)函數

1. yum install yum-utils
    2. yum install kernel-devel
    3. debuginfo-install kernel
    4. yum install systemtap

第三步安裝失敗的話,使用內核版本號找到對應的包進行安裝就行了。
完成後輸入如下命令進行測試工具

stap -ve 'probe begin { log("hello world") exit() }'

若是安裝成功則是這樣
clipboard.png性能

下載 openresty-systemtap-toolkit

要知道systemtap只是個內核探測工具,不僅是能夠用在openresty中的,你得本身寫好腳原本進行埋點等工做。可是春哥已經在 openresty-systemtap-toolkit 中提供了許多能夠直接使用的腳本,咱們直接拿過來用就行了,畢竟我本身是不會寫的。測試

下載 FlameGraph

使用上面openresty-systemtap-toolkit這些腳本後,咱們其實已經能夠拿到咱們所須要的信息了,只是仍是不夠直觀,因此咱們得用FlameGraph火焰圖生成工具來生成直觀的圖片。lua

使用示例

1.找到咱們要監控的nginx的某個進程
ps -ef | grep nginxspa

clipboard.png

2.ngx-sample-lua-bt 抓取棧信息(這個工具能夠看到在某個文件對應行函數的狀況)
此處我是把上面下載的openresty-systemtap-toolkitFlameGraph加到環境變量裏面去了。因此直接輸入命令就好了

ngx-sample-lua-bt -p 19075 --luajit20 -t 5 > temp.bt

3.使用fix-lua-bt把上面獲得的文件轉化更友好點(直接看到對應的lua函數)

fix-lua-bt temp.bt > a.bt

4.使用下面兩個FlameGraph中的命令將文件轉化爲svg圖片

stackcollapse-stap.pl a.bt > a.cbt
flamegraph.pl a.cbt > a.svg

而後打開a.svg就能夠看到火焰圖了

相關文章
相關標籤/搜索