JAVA探針

一、需求

Tomcat:
(1)模塊啓動時間
(2)模塊交互耗時

二、現狀

現代APM體系,基本都是參考Google的Dapper(大規模分佈式系統的跟蹤系統)的體系來做的。通過跟蹤請求的處理過程,來對應用系統在前後端處理、服務端調用的性能消耗進行跟蹤,關於Dapper的介紹可以看這個鏈接:http://bigbully.github.io/Dapper-translation/
下面重點選5個比較有名的server端探針進行簡單介紹:

2.1 Pinpoint(開源)

github地址:https://github.com/naver/pinpoint
java領域的性能分析的開源項目,這個是一個韓國團隊開源出來的,通過JavaAgent的機制來做字節碼代碼植入,實現加入traceid和抓取性能數據的目的。
NewRelic、Oneapm之類的工具在java平臺上的性能分析也是類似的機制。

2.2 Zipkin(開源)

官網:OpenZipkin · http://zipkin.io/
github地址:https://github.com/openzipkin/zipkin
這個是twitter開源出來的,也是參考Dapper的體系來做的。
Zipkin的java應用端是通過一個叫Brave的組件來實現對應用內部的性能分析數據採集。
Brave的github地址:https://github.com/openzipkin/brave
這個組件通過實現一系列的java攔截器,來做到對http/servlet請求、數據庫訪問的調用過程跟蹤。
然後通過在spring之類的配置文件里加入這些攔截器,完成對java應用的性能數據採集。

2.3 CAT(開源)

github地址:https://github.com/dianping/cat
這個是大衆點評開源出來的,實現的功能也還是蠻豐富的,國內也有一些公司在用了。
不過他實現跟蹤的手段,是要在代碼裏硬編碼寫一些“埋點”,也就是侵入式的。
這樣做有利有弊,好處是可以在自己需要的地方加埋點,比較有針對性;壞處是必須改動現有系統,很多開發團隊不願意。

2.4 NewRelic(閉源,代碼不混淆)

https://newrelic.com/java

2.5 聽雲(閉源,代碼混淆)

http://www.tingyun.com/tingyun_server.html
探針能力介紹:http://doc.tingyun.com/server/html/phpzhichiliebiao.html

三、探針能力彙總

3.1 支持

(1)應用運行環境:PHP, Java, .NET,Node.js, Python,Ruby等
(2)雲:阿里雲、騰訊雲、AWS、金山雲、青雲、華爲雲等
(3)Database:MySQL, Oracle, MS SQL Server, PostgreSQL等
(4)Framework:Spring, Yii,Django,Tomcat,JBoss,WebLogic等
(5)NoSQL:Memcached,MongoDB,Redis等非關係型數據庫服務
(6)API:監控HTTP、Dubbo、Thrift協議下當前應用調用的外部服務,如微博、微信第三方API接口等,並支持跨應用分析

3.2 核心功能

(1)web應用過程:分析url調用過程中性能消耗原因,抓取超過閾值url的詳細數據
(2)數據庫性能:支持多種數據庫類型的監測,定位並追蹤慢SQL語句問題
(3)錯誤分析:記錄錯誤發生時的詳細信息,統計應用錯誤率,定位問題具體至代碼行
(4)外部API調用:可以監測所有服務端應用外部調用API的耗時,並進行彙總統計
(5)線程剖析:可以實現生產環境下實時在線的線程剖析,可在運行時瞭解代碼性能
(6)NoSQL分析:實時監控Memcache, MongoDB,Redis等NoSQL數據庫的性能問題
(7)JVM性能:實時監控 JVM 運行狀態,通過圖表展示 JVM 內存分配情況、內存使用情況、垃圾收集信息、類加載數量、JVM 線程信息以及會話信息。
(8)HTTP 會話:分析每個應用程序的 HTTP 會話數,包括:活躍、過期、拒絕的會話。

3.3 基於javaAgent和Java字節碼注入技術的java探針

(1)springCloud自帶了這些功能
(2)asm、javassist之類的
(3)springboot的Actuator擴展下也可以


《參考:https://www.jianshu.com/p/f74d0065d3bf》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章