一、Arthas简介

Arthas是Alibaba开源的Java诊断工具,功能很强大,它是通过Agent方式来连接运行的Java进程、主要通过交互式来完成功能。

https://arthas.aliyun.com/doc/stack.html

首先贴出官方文档,自己使用也不多,主要用于一次线上问题排查

二、运行

java -jar arthas-boot.jar ,运行Arthas

选择要粘附的进程,输入编号即可

使用以下两个命令其中一个查看java程序的进程号
ps -ef
jps

备注:也可以通过浏览器连接Arthas,只是执行命令的时候需要加--target-ip参数

三、dashboard

输入以下命令进入仪表盘,监控线程,内存状态,GC等信息

四、thread

打印全部线程:thread

打印最忙的前10条线程: thread -n 10

根据线程号打印: thread 20

找出阻塞其他线程的线程 注意, 目前只支持找出synchronized关键字阻塞住的线程, 如果是java.util.concurrent.Lock, 目前还不支持。
thread -b

如果响应慢,阻塞状态的线程比较多,我们需要重点关注

五、查看已经加载的类(如果没有代码权限,使用jad)

sc com.XXX.sgw.controller.*
sc com.XXX.controller.AccessLogController

六、追踪方法堆栈调用时间

跟踪方法内部调用,输出各个节点的耗时,主要用于响应慢的时候

trace comXXX.controller.api.ServiceGatewayV1Controller list
trace com.XXX.service.ServiceGatewayV1Service customizeQuery m -n 2 ,一般需要输出多次结果,所以这里可以通过-n指定结果数量

 

七、查看程序调用出入参

类似于debug,查看被测方法的参数和返回值

watch com.XXX.controller.api.ServiceGatewayV1Controller list "{params[0],params[1],returnObj}"
watch com.XXX.service.ServiceGatewayV1Service customizeQuery "{params[0],params[1],params[2],returnObj}"

八、回溯方法执行

下面关注:耗时、IS-RET为false表示失败

tt -t com.XXX.vo.PageVo getPageSize
tt -i 1037 -w "target.getPageSize()"

九、查看方法被调用路径

stack com.XXX.service.impl.PostgresqlServiceImpl customQuery

十、反编译线上代码

jad --source-only com.yingzi.data.sgw.controller.api.ServiceGatewayV1Controller
jad --source-only com.yingzi.data.sgw.controller.api.ServiceGatewayV1Controller getDataByAlgorithm

十一、以3秒为一个时间窗口,统计时间窗口内调用次数,成功次数,失败次数,平时RT时间。用于监控方法的执行情况
monitor -c 3 com.yingzi.data.sgw.controller.api.ServiceGatewayV1Controller list

十二、JVM

重点关注下死锁(DEADLOCK-COUNT,下面不为0,表示有死锁)

根据下面的栈信息,可以看到,这两个线程互相请求被对方占用未释放的资源导致了死锁。举个例子,现实中很少

十三、profiler(火焰图)

系统cpu高的时候,我们可以看系统调用,相比于perf命令,profiler的步骤要更简便点,

profiler start,启动,默认是生成cpu的火焰图,which event to trace (cpu, alloc, lock, cache-misses etc.), default value is cpu

profiler stop,停止,可以看到生成的svg文件路径

最新文章

  1. JavaScript创建对象及对象继承
  2. java接口的嵌套
  3. [bzoj1984]月下“毛景树”
  4. SSH如何通过公钥连接云服务器
  5. [算法]检测空间三角形相交算法(Devillers & Guigue算法)
  6. MVC传值汇总
  7. 滚动光效shader
  8. MySQL语句45道练习题及答案
  9. php常用代码(一)
  10. ubuntu14.04恢复系统默认中文字体
  11. 64位系统下注册32位dll文件
  12. POJ 2697 A Board Game (bfs模拟)
  13. json 多重嵌套反序列化和序列化
  14. iOS 之 protocol的相关问题
  15. LocalMaxima_NOI导刊2009提高(1)
  16. Exchange-重建见证服务器和目录
  17. OA系统开发人事模块关于请假跨月的处理
  18. Centos7之系统优化
  19. git了解-使用笔记
  20. 转载-MySQL binlog三种模式及设置方法

热门文章

  1. PCB中的生产工艺、USB布线、特殊部件、蓝牙天线设计
  2. 2022DASCTF X SU 三月春季挑战赛 ezpop
  3. RedisDesktopManager 连接不上远程 Redis
  4. Python:爬取全国各省疫情数据并在地图显示
  5. Django项目引入NPM和gulp管理前端资源
  6. YACS-2022.4-银组
  7. SpringBoot2.x修改Redis序列化方式
  8. 基于Nginx实现反向代理
  9. spring配置数据源(加载properties文件)
  10. print,printf,println的区别,以及\r,\n,\r\n的区别