论坛首页新手上路 签到
查看: 105|回复: 0

[FAQ] 借助 arthas 排查现场服务器 jvm 问题

[复制链接]
金智教育-熊俊

该用户从未签到

40

主题

40

帖子

120

积分

版主

Rank: 7Rank: 7Rank: 7

积分
120
发表于 2021-1-20 15:51:12 | 显示全部楼层 |阅读模式
本帖最后由 xiongjun 于 2021-1-21 09:37 编辑

arthas 是阿里出的 Java 诊断工具。JDK 最低要求 1.6,在测试环境试了 jrockit 1.6 也支持。

服务器上使用 weblogic 用户进行以下操作,省的文件所属用户及用户组的修改。

操作步骤:
1、上传附件中 arthas.zip 文件到服务器

2、unzip 解压文件
unzip arthas.zip

3、切换到 arthas 目录
cd arthas

4、授权 arthas.sh 脚本可执行
chmod +x arthas.sh

5、执行脚本
./arthas.sh

6、根据提示的server名称,选择对应进程的下标。如下图,rsfw_server1的进程id=16906,输入 5 即可
s1.png

7、arthas 启动成功后,可以查看线程占用 cpu 信息、某线程栈、内存使用信息、dump 堆、大屏监控

指令:thread
作用:线程信息按占用 cpu 由高到低。服务假死有时候是无法通过 thread 指令获取到线程信息的,只能通过 heapdump 指令 dump 堆栈。
s2.jpg


指令:thread -n 3
作用:显示占用 cpu 最高的 3 个线程调用栈信息
s3.jpg


指令:thread <线程id>
作用:显示具体线程的调用栈
s4.jpg


指令:dashboard
作用:大屏监控线程、内存、运行时环境,自动间隔刷新
s5.jpg


指令:jvm
作用:查看 jvm 启动参数、类加载、编译、GC、内存等信息

s6.jpg


指令:vmoption
作用:显示 jvm 日志打印与堆 dump 配置

s7.jpg


指令:heapdump /tmp/arthas/16906.hprof
作用:dump 堆栈到指定文件。该文件需要借助工具分析(mat | JProfiler | jvisualvm)

s8.jpg

还有一些其他指令,比如
getstatic 获取类的静态变量值;
jad 直接反编译class文件确定具体java代码的版本很实用;
watch 监听类的方法的入参与返回值;
等,具体文档参考:https://arthas.aliyun.com/doc/quick-start.html


8、排查完问题,不要忘了关闭进程(注:exit、quit 指令仅退出,监听的端口仍然存在)
指令:stop
s9.jpg


=======================================================

现场实施在 java 服务出问题,且急需重启的情况下,关注步骤1-8,
其中步骤 7 无需都执行,生成以下 4 个文件即可
  • 执行 dashboard 截个图,转给开发
  • 执行 thread > /tmp/t-<进程id>.txt
  • 执行 thread -n 20 > /tmp/td-<进程id>.txt
  • 执行 heapdump  /tmp/h-<进程id>.hprof

如上面截图中的进程id=16909,具体指令为

thread > /tmp/t-16909.txt
thread -n 20 > /tmp/td-16909.txt
heapdump /tmp/h-16909.hprof
s10.jpg
保留一图、3个文件(thread指令执行无响应,可跳过;hprof 必须保留),即可重启 weblogic server。

arthas.zip (124.23 KB, 下载次数: 0)
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

Archiver|手机版|小黑屋|江苏金智教育信息股份有限公司 ( 系统管理员:binmeng@wisedu.com  

GMT+8, 2021-3-3 03:43

Powered by Discuz! X3.2

© 2015 Design: www.wisedu.com

快速回复 返回顶部 返回列表