Arthas常用功能及一次线上问题排查
一、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文件路径
最新文章
- JavaScript创建对象及对象继承
- java接口的嵌套
- [bzoj1984]月下“毛景树”
- SSH如何通过公钥连接云服务器
- [算法]检测空间三角形相交算法(Devillers &; Guigue算法)
- MVC传值汇总
- 滚动光效shader
- MySQL语句45道练习题及答案
- php常用代码(一)
- ubuntu14.04恢复系统默认中文字体
- 64位系统下注册32位dll文件
- POJ 2697 A Board Game (bfs模拟)
- json 多重嵌套反序列化和序列化
- iOS 之 protocol的相关问题
- LocalMaxima_NOI导刊2009提高(1)
- Exchange-重建见证服务器和目录
- OA系统开发人事模块关于请假跨月的处理
- Centos7之系统优化
- git了解-使用笔记
- 转载-MySQL binlog三种模式及设置方法
热门文章
- PCB中的生产工艺、USB布线、特殊部件、蓝牙天线设计
- 2022DASCTF X SU 三月春季挑战赛 ezpop
- RedisDesktopManager 连接不上远程 Redis
- Python:爬取全国各省疫情数据并在地图显示
- Django项目引入NPM和gulp管理前端资源
- YACS-2022.4-银组
- SpringBoot2.x修改Redis序列化方式
- 基于Nginx实现反向代理
- spring配置数据源(加载properties文件)
- print,printf,println的区别,以及\r,\n,\r\n的区别