openresty 火焰圖
火焰圖介紹
看到openresty
裡用火焰圖覺得挺有意思的,又裝逼又有用。它可以快速的定位到程式效能的瓶頸,生成程式的呼叫棧並且計算呼叫棧中每部分的 CPU
消耗,能夠比較容易的找到CPU
佔用高、記憶體洩漏等問題。今天在自己以前的專案中測試了下,下面貼個圖留個紀念。
這裡面不要看顏色,因為顏色是隨機搞來的,沒有任何意義。要看火焰山上縱向的高度和每個對應的長度。縱向的高度代表函式呼叫棧的深度,橫向長度代表此函式執行佔用CPU
的比例。
下面來了解下火焰圖工具如何安裝。
火焰圖安裝
參考 http://kernelmaker.github.io/...
安裝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() }'
如果安裝成功則是這樣
下載 openresty-systemtap-toolkit
要知道systemtap
只是個核心探測工具,不只是可以用在openresty
中的,你得自己寫好指令碼來進行埋點等工作。但是春哥已經在 openresty-systemtap-toolkit
中提供了許多可以直接使用的指令碼,我們直接拿過來用就好了,畢竟我自己是不會寫的。
下載 FlameGraph
使用上面openresty-systemtap-toolkit
FlameGraph
火焰圖生成工具來生成直觀的圖片。
使用示例
1.找到我們要監控的nginx
的某個程序ps -ef | grep nginx
2.ngx-sample-lua-bt
抓取棧資訊(這個工具可以看到在某個檔案對應行函式的情況)
此處我是把上面下載的openresty-systemtap-toolkit
和FlameGraph
加到環境變數裡面去了。所以直接輸入命令就行了
ngx-sample-lua-bt -p 28510 --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
就可以看到火焰圖了