栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

线上简单实用的阿里巴巴 Java 诊断工具 Arthas 强烈推荐使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

线上简单实用的阿里巴巴 Java 诊断工具 Arthas 强烈推荐使用

Arthas 是什么?

Arthas是阿里巴巴开源的 Java诊断工具,基本使用场景是定位复现一些生产环境比较难以定位问题。可以在线排查问题,以及动态追踪Java代码,实时监控JVM状态等等

github : https://github.com/alibaba/arthas

wiki: https://alibaba.github.io/arthas/

当你遇到以下类似问题而束手无策时,Arthas 可以帮助你解决:

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?

  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?

  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?

  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!

  5. 是否有一个全局视角来查看系统的运行状况?

  6. 有什么办法可以监控到JVM的实时运行状态?

Arthas 功能特性
  1. 查看类加载情况

  2. 反编译

  3. 热更新

  4. 分析方法的入参和返回值

  5. 跟踪慢调用

  6. 找出阻塞线程

Arthas 的安装与快速启动
  1. 下载启动

    jar包 wget https://alibaba.github.io/arthas/arthas-boot.jar

  2. 启动 java -jar arthas-boot.jar

常用功能

1. dashboard

当前系统的实时数据面板。

数据说明

  • ID: Java级别的线程ID,注意这个ID不能跟jstack中的nativeID一一对应

  • NAME: 线程名

  • GROUP: 线程组名

  • PRIORITY: 线程优先级, 1~10之间的数字,越大表示优先级越高

  • STATE: 线程的状态CPU%: 线程消耗的cpu占比,采样100ms,将所有线程在这100ms内的cpu使用量求和,再算出每个线程的cpu使用占比。

  • TIME: 线程运行总时间,数据格式为分:秒

  • INTERRUPTED: 线程当前的中断位状态

  • DAEMON: 是否是daemon线程

2. thread

查看当前线程信息,查看线程的堆栈。

  1. thread  展示所有线程信息

  2. thread -n 3  展示当前最忙的3个线程

  3. thread id  显示指定线程的运行堆栈

  4. thread -b 找出当前阻塞其他线程的线程

3. trace

跟进方法调用路径,并打印每个方法运行时间

trace com.xuebaclass.sato.service.impl.ReportWorkSpaceServiceImpl dailyReportV2

打印方法调用栈信息及运行时间

  • -j 过滤掉 jdk 函数

-j: jdkMethodSkip, skip jdk method trace
  • 同时跟踪多个方法

trace -j -E com.xuebaclass.sato.service.impl.ReportWorkSpaceServiceImpl dailyReport|dailyReportV2
  • 同时跟进多个 耗时超过10ms的方法

trace -j -E com.xuebaclass.sato.service.impl.ReportWorkSpaceServiceImpl dailyReport|dailyReportV2 '#cost > 10'

4. watch

方便的观察到指定方法的调用情况。能观察到的范围为:返回值、抛出异常、入参

  • 查看方法入参和返回值

watch com.xuebaclass.sato.service.impl.ReportWorkSpaceServiceImpl dailyReportV2 "{params,returnObj}" -x 2
  • 只查看方法入参

watch com.xuebaclass.sato.service.impl.ReportWorkSpaceServiceImpl dailyReportV2 "{params,returnObj}" -x 2 -b
  1. -x 表示遍历深度,可以调整来打印具体的参数和结果内容,默认值是1

  2. -e 表示抛出异常时才触发

#cost>200(单位是ms)表示只有当耗时大于200ms时才会输出,过滤掉执行时间小于200ms的调用

4. sc

查看JVM已加载的类信息。

  • 打印类的详细信息

sc -d com.xuebaclass.sato.service.impl.ReportWorkSpaceServiceImpl
  • 打印类的详细信息 & 属性信息

sc -d -f com.xuebaclass.sato.service.impl.ReportWorkSpaceServiceImpl
  • 模糊搜索

sc com.xuebaclass.sato.cont*

5. sm

查看已加载类的方法信息。

  • 打印类的详细信息

sm com.xuebaclass.sato.service.impl.ReportWorkSpaceServiceImpl
  • 打印类的详细信息 & 属性信息

sm -d -f com.xuebaclass.sato.service.impl.ReportWorkSpaceServiceImpl
参考
  • https://arthas.gitee.io/commands.html 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/870861.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号