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文件路径

Arthas常用功能及一次线上问题排查的更多相关文章
- 线上问题排查神器 Arthas
线上问题排查神器 Arthas 之前介绍过 BTrace,线上问题排查神器 BTrace 的使用,也说它是线上问题排查神器.都是神器,但今天这个也很厉害,是不是更厉害不好说,但是使用起来非常简单.如果 ...
- Java线上问题排查神器Arthas实战分析
概述 背景 是不是在实际开发工作当中经常碰到自己写的代码在开发.测试环境行云流水稳得一笔,可一到线上就经常不是缺这个就是少那个反正就是一顿报错抽风似的,线上调试代码又很麻烦,让人头疼得抓狂:而且deb ...
- Java线上问题排查思路及Linux常用问题分析命令学习
前言 之前线上有过一两次OOM的问题,但是每次定位问题都有点手足无措的感觉,刚好利用星期天,以测试环境为模版来学习一下Linux常用的几个排查问题的命令. 也可以帮助自己在以后的工作中快速的排查线上问 ...
- java:线上问题排查常用手段(转)
出处:java:线上问题排查常用手段 一.jmap找出占用内存较大的实例 先给个示例代码: import java.util.ArrayList; import java.util.List; imp ...
- JVM 线上故障排查
JVM 线上故障排查 Linux 1.1 CPU 1.2 内存 1.3 存储 1.4 网络 一.CPU 飚高 寻找原因 二.内存问题排查 三.一般排查问题的方法 四.应用场景举例 4.1 怎么查看某个 ...
- 【转】又一次线上 OOM 排查经过
又一次线上OOM排查经过 最近线上一个服务又出现了频繁Full GC的情况,导致提供的业务经常超时.问题出现非常不稳定,经过两周的时候,终于又捕捉到了一次Full GC,于是联系运维做Heap Dum ...
- Java架构师线上问题排查,这些命令程序员一定用得到!
Java架构师线上问题排查,这些命令程序员一定用得到! 线上问题排查,以下场景,你遇到过吗? 一.了解机器连接数情况 问题:1.2.3.4的sshd的监听端口是22,如何统计1.2.3.4的sshd服 ...
- JVM线上问题排查
前言 本文介绍服务器内运行的 Java 应用产生的 OOM 问题 和 CPU 100% 的问题定位 1. 内存 OOM 问题定位 某Java服务(比如进程id pid 为 3320)出现OOM,常见的 ...
- BTrace:线上问题排查工具
BTrace简介 GitHub地址:BTrace 下载地址:v1.3.11.3 官方使用教程:Btrace使用教程 使用场景 BTrace 是一个事后工具,所谓事后工具就是在服务已经上线了,但是发现存 ...
随机推荐
- 学习Cobbler(二)
Server端: 第一步,启动Cobbler服务 第二步,进行Cobbler错误检查,执行cobbler check命令 第三步,进行配置同步,执行cobbler sync命令 第四步,复制相关启动文 ...
- 学习ELK日志平台(三)
ELK(elasticsearch.logstash.kibana) Elastic Stack是原ELK Stack在5.0版本加入Beats套件后的新称呼 解决痛点: 开发人员不能登录线上serv ...
- 让弹幕给 PPD 生个孩子
怎样才能跑起来我写的弹幕程序 资源下载 申请野狗后端云账号注册 创建应用: 复制appId到index.html的 var ref = new Wilddog("https://<ap ...
- new String比字符串池浪费空间,为什么要用它?
对于下面程序中:ss0 = new String( "hello" );是用new()来新建对象的,存于堆中.每调用一次就会创建一个新的对象.当然从节省空间的角度来讲,肯定不如st ...
- java多线程的状态转换以及基本操作
1. 新建线程 一个java程序从main()方法开始执行,然后按照既定的代码逻辑执行,看似没有其他线程参与,但实际上java程序天生就是一个多线程程序,包含了:(1)分发处理发送给给JVM信号的线程 ...
- animate.css使用
解决 使用jquery单纯添加类不能出现动画 使用jQuery向元素中添加类制作动画的时候,需要使用setTimeout实现,因为动画需要从一个状态到另外一个状态!时间设置为0
- python 反序列化
Python-反序列化函数使用 pickle.dump(obj, file) : 将对象序列化后保存到文件 pickle.load(file) : 读取文件, 将文件中的序列化内容反序列化为对象 pi ...
- Python入门-字符串格式化
一.不推荐使用:%号 #正常按照位置传递参数 print('%s asked %s to do something' % ('egon', 'lili')) #先后顺序不能乱 #字典传递参数 prin ...
- LC-141andLC-142
142. 环形链表 II 思路: 设链表共有 a+b 个节点,其中 链表头部到链表入口 有 a 个节点(不计链表入口节点), 链表环 有 b 个节点. 再设两指针分别走了 f,s 步,则有: f = ...
- QT-notepad++仿写
最近小忙,准备学习下FFMPEG 涉及:工具栏使用,QAction,文件基本读写操作 Github地址:https://github.com/wsdassssss/notepad-