Pepper Metrics是我與同事開發的一個開源工具(github.com/zrbcool/pep…),其經過收集jedis/mybatis/httpservlet/dubbo/motan的運行性能統計,並暴露成prometheus等主流時序數據庫兼容數據,經過grafana展現趨勢。其插件化的架構也很是方便使用者擴展並集成其餘開源組件。
請你們給個star,同時歡迎你們成爲開發者提交PR一塊兒完善項目。git
業務上一個新業務上線,發現CPU使用率較高,咱們的業務特色通常是IO密集型,因此通常呈現CPU使用率較低,可是QPS較高的特色,因此對這個特殊的服務進行性能分析,如下是分析過程。github
跑題了,前面分析CPU的過程當中無心間發現了中斷不平均的問題,但並非咱們CPU使用率高的緣由,CPU主要仍是%us高,回來分析CPU使用率,因爲代碼不是本人所寫,不會直接去分析代碼,那樣無異於大海撈針,拿出珍藏的perf大法,生成火焰圖分析。web
CPU火焰圖的生成方法參考前面的文章:數據庫
生成的火焰圖以下:
oss.zrbcool.top/picgo/ad-da…網絡
CoohuaAnalytics$KafkaConsumer:::send方法中Gzip壓縮佔比較高
已經定位到方法級別,再看代碼就快速不少,直接找到具體位置,找到第一個消耗大戶:Gzip壓縮
mybatis
展開2這個波峯,查看到這個getOurStackTrace方法佔用了大比例的CPU,懷疑代碼裏面頻繁用丟異常的方式獲取當前代碼棧
架構
展開波峯3,能夠看到是這個Gzip解壓縮 svg
到此咱們就找到了這個應用的三個主要的CPU消耗點,經過火焰圖,咱們很方便的能夠分析到具體代碼級別的CPU使用狀況,徹底能夠將應用當作一個黑盒來分析,分析性能以前,我對代碼徹底不瞭解的狀況下分析到了CPU使用率的性能瓶頸。工具
後續: 等過幾天優化完成後再行對比CPU使用率狀況。post