監控java應用
若是容器集群環境,則選擇容器服務環境
手動安裝方式,是手動把 agent的jar包放到 ecs服務器,然后運行個人的spring boot服務時,加上一些參數,將agent也啟動運行
手動集成-添加agent
監控的是ecs中的java應用,因此要將agent下載到ecs中
添加unzip指令集,并解壓縮
在ecs中啟動服務
java -javaagent:/home/admin/AliyunJavaAgent/aliyun-java-agent.jar -Darms.licenseKey=dnnlqal****** -Darms.appName=my-service -jar arms-0.0.1-SNAPSHOT.jar
?/home/admin? 是agent在ecs中的實際路徑
最后的? -jar *.jar & 是啟動的自己的java服務jar包
啟動
集成的效果
接口調用
JVM監控
線程池監控
限制:僅支持部分框架
持續性能刨析
作用:分析內存占用、接口cpu耗時函數
解決內存占用異常問題
線程池組:先看下各個線程池組的內存占比,找到業務中的線程池(本圖的內存占用 arms的agent占用最多,但是我們不用分析,因此不選。。現實場景,自己的業務占用的內存占絕大多數)
可以一個個的線程池組分析、也可以先多選幾個一塊分析
現實模式:使用表格+火焰的形式。
從下往上找,自己業務的最寬的方法,就是導致占用內存較多的原因。
org.draymond.arms.ArmsThreadTest.extracted(String)
?在代碼中找到對應的位置,然后分析原因
解決接口慢問題
trace?+ 火焰圖
1.通過trace先定位哪個接口慢
找到一個慢的traceId
詳情里面有各個span的耗時(因為我只開了一個服務,也沒有手動添加span,所以沒有其他span了)
不足:該接口內部的邏輯,不確定哪個地方是卡點
但是使用 “代碼整體執行時間火焰圖” 輔助分析
從trace中找到慢的 服務 與 慢方法
搜索自己業務的路徑
arms/byte/id
調用關系:
org.draymond.arms.ArmsController.bytesTest(Integer)
org.draymond.arms.ArmsService.bytesTest(Integer)
org.draymond.arms.ArmsService.sleepNumberTime(Integer)
入口:.ArmsController.bytesTest 花費??7.15 m, 占比49%
最耗時方法:ArmsService.sleepNumberTime
定位:最根本的是?sleepNumberTime 的sleep占用了大量時間。
解決CPU不穩定問題
解決GC頻繁問題