arthas线上问题检查思路

📢📢📢📣📣📣

哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步🤝🤝

一位上进心十足的【Java ToB端大厂领域博主】!😜😜😜

喜欢java和python,平时比较懒,能用程序解决的坚决不手动解决😜😜😜

✨ 如果有对【java】感兴趣的【小可爱】,欢迎关注我

❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️


如果觉得本文对你有帮助,欢迎点赞,欢迎关注我,如果有补充欢迎评论交流,我将努力创作更多更好的文章。

背景

是不是在实际开发工作当中经常碰到自己写的代码在开发、测试环境行云流水稳得一笔,可一到线上就经常不是缺这个就是少那个反正就是一顿报错抽风似的,线上调试代码又很麻烦,让人头疼得抓狂;而且debug不一定是最高效的方法,遇到线上问题不能debug了怎么办。原先我们Java中我们常用分析问题一般是使用JDK自带或第三方的分析工具如jstat、jmap、jstack、 jconsole、visualvm、Java Mission Control、MAT等。但此刻的你没有看错,还有一款神器Arthas工具着实让人吃惊,可帮助程序员解决很多繁琐的问题,使得加班解决线上问题成为过去的可能性大大提高。

定义

Arthas是一个Java诊断工具,由阿里巴巴中间件团队开源,目前已在Java开发人员中被广泛采用。Arthas能够分析,诊断,定位Java应用问题,例如:JVM信息,线程信息,搜索类中的方法,跟踪代码执行,观测方法的入参和返回参数等等。并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法的出入参,异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。简单的话:就是再不重启应用的情况下达到排查问题的目的。

安装与启动

下载arthas-boot.jar
curl -O https://arthas.aliyun.com/arthas-boot.jar

然后用java -jar的方式启动:

java -jar arthas-boot.jar

注意事项:

arthas-boot使用的jdk版本,需要与要监控的进程jdk版本保持一致,否则会启动失败。

使用指定jdk版本启动:

/Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Contents/Home/bin/java -jar arthas-boot.jar

分析步骤

  1. 通过dashboard命令查看当前系统的实时数据,例如CPU占用率,heap占用率等;
  2. 如果有CPU占用异常,通过thread命令,查看CPU占用率高的线程的堆栈,找到对应的类和方法再进一步分析;
  3. 如有堆栈占用异常,在heap占用率高时,通过heapdump 命令下载heapdump文件到本地,分析占用内存高的未被回收的对象,再通过寻找创建对象的方法分析原因;
  4. 通过profiler命令,分析执行方法的CPU占用率;
  5. 通过trace命令,可以分析方法内部调用路径和输出方法路径上的每个节点上耗时,在耗时长的路径上思考优化方案;

常用命令

官方命令列表:

arthas.aliyun.com/doc/command...

dashboard命令

查看当前系统的实时数据,如CPU占用率,heap占用率等

trace 命令

trace com.xx.dso.service generateDsoExcel

方法内部调用路径,并输出方法路径上的每个节点上耗时

heapdump 命令

创建到指定文件夹下

heapdump --live /Users/xxx/Documents/dump.hprof

当我们拿到hprof文件后,该如何分析呢,这时候我们可以用到jdk自带的jhat命令进行分析。

创建成功后,我们就可以在指定文件夹下看到对应的dump文件,然后使用命令jhat dump.hprof,生成文件,成功后我们就可以通过IP+端口进行访问了

jhat dump.hprof

如果报错端口被占用,可以指定端口打开

jhat -port 7001 dump.hprof

出现Started HTTP server on port 7000信息时,咱们就可以使用IP+port进行访问了。例如访问 localhost:7001

profiler命令

通过不断的采样,然后把收集到的采样结果生成火焰图。

复制代码
//启动
$ profiler start  
Profiling started

//停止,并生成HTML格式的结果
$ profiler stop --format html
profiler output file: /xxx/arthas-output/20220727-145209.html
OK

在arthas启动的状态下,可以通过浏览器访问http://localhost:3658/arthas-output/ 或启动位置的 arthas-output 下面查看 profiler 结果

常见问题

  1. 启动时:ERROR attach fail, targetPid: XXX

原因:异常退出,导致端口被占用,并且不能通过kill -9 来清除掉这个端口

解决方法:使用同一个端口启动,进入刚刚选择的进程,执行stop命令完全退出

后续会根据每一个场景的排查命令列举示例

参考文章

www.wdbyte.com/2019/11/art...

blog.fastthread.io/tag/heap-du...

相关推荐
桦说编程8 小时前
盘点并发集合里那些容易误判的行为
java·后端·性能优化
RoboWizard11 小时前
金士顿Canvas系列存储卡有什么特别的技术优势?
人工智能·性能优化
爱喝水的鱼丶1 天前
SAP-ABAP:BAPI 基础认知:SAP 标准业务对象接口的核心逻辑与调用入门
信息可视化·性能优化·sap·abap·bapi·开发交流·交流学习
AI服务老曹2 天前
边云协同视频分析性能优化指南:多站点部署下的资源瓶颈突破与调优实战
性能优化·音视频
A_cainiao_A3 天前
【ggml系列】【第五篇】ggml_compute_forward_mul_mat 矩阵乘法算子源码与性能优化深度解析
线性代数·性能优化·矩阵
ai产品老杨3 天前
边云协同视频分析性能优化指南:多站点部署下的参数配置与排查清单(边缘推理+云端管理)
性能优化·音视频
苏打水com3 天前
《llama.cpp性能优化实战:从显存、KV Cache到Token/s》
性能优化·llama
该用户可能存在3 天前
【Win11优化】StartAllBack实战:解决任务栏合并、右键折叠等痛点
windows·性能优化·win11·windows 11·startallback·任务栏·开始菜单
灯澜忆梦3 天前
【MySQL12】进阶篇 | SQL优化
数据库·sql·mysql·性能优化
爱喝水的鱼丶3 天前
SAP-ABAP:性能优化效果验证与回归测试:优化前后性能对比、业务逻辑兼容性校验方案
性能优化·sap·abap·回归测试·开发交流·交流学习