看到openresty
裏用火焰圖以爲挺有意思的,又裝逼又有用。它能夠快速的定位到程序性能的瓶頸,生成程序的調用棧而且計算調用棧中每部分的 CPU
消耗,可以比較容易的找到CPU
佔用高、內存泄漏等問題。今天在本身之前的項目中測試了下,下面貼個圖留個記念。nginx
這裏面不要看顏色,由於顏色是隨機搞來的,沒有任何意義。要看火焰山上縱向的高度和每一個對應的長度。縱向的高度表明函數調用棧的深度,橫向長度表明此函數執行佔用CPU
的比例。git
下面來了解下火焰圖工具如何安裝。github
參考 http://kernelmaker.github.io/...svg
其實主要就是安裝內核探測工具 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() }'
若是安裝成功則是這樣性能
要知道systemtap
只是個內核探測工具,不僅是能夠用在openresty
中的,你得本身寫好腳原本進行埋點等工做。可是春哥已經在 openresty-systemtap-toolkit
中提供了許多能夠直接使用的腳本,咱們直接拿過來用就行了,畢竟我本身是不會寫的。測試
使用上面openresty-systemtap-toolkit
這些腳本後,咱們其實已經能夠拿到咱們所須要的信息了,只是仍是不夠直觀,因此咱們得用FlameGraph
火焰圖生成工具來生成直觀的圖片。lua
1.找到咱們要監控的nginx
的某個進程ps -ef | grep nginx
spa
2.ngx-sample-lua-bt
抓取棧信息(這個工具能夠看到在某個文件對應行函數的狀況)
此處我是把上面下載的openresty-systemtap-toolkit
和FlameGraph
加到環境變量裏面去了。因此直接輸入命令就好了
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
就能夠看到火焰圖了