阿里云-arms监控
监控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频繁问题