您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

深度解析阿里Arthas:从入门到精通,掌握Java应用问题排查利器

时间:2023-03-03 15:56:23  来源:今日头条  作者:摆脱格子衫
本篇带给大家Arthas的一些常用命令,可以帮助开发者快速定位和解决JAVA应用中的问题。当然,Arthas还有许多其他的功能和命令,这里只是介绍了一部分。

Arthas是阿里开源的一款Java诊断工具,支持在线排查Java应用问题。它能够帮助Java开发者快速定位并解决生产环境中的各种问题,例如性能问题、死锁问题、内存泄漏问题等。

以下是Arthas教程的详细介绍,包括每个使用知识点的实例命令和输出:

1、安装Arthas

首先需要下载Arthas并安装,具体操作可以参考Arthas的官方文档。

2、连接目标Java进程

在Arthas安装完成后,使用以下命令连接目标Java进程:

$ java -jar arthas-boot.jar
$ attach PID

其中,PID是目标Java进程的进程ID。

输出:

成功连接到目标Java进程。

3、查看Java类信息

使用以下命令可以查看Java类的信息:

  • 查看类名:
$ class com.example.demo.DemoController

输出:

class com.example.demo.DemoController
  • 查看类的所有方法:
$ method com.example.demo.DemoController

输出:

com.example.demo.DemoController
public java.lang.String com.example.demo.DemoController.hello(java.lang.String)
public void com.example.demo.DemoController.handleException()
  • 查看类的所有属性:
$ field com.example.demo.DemoController

输出:

com.example.demo.DemoController
private static final org.slf4j.Logger com.example.demo.DemoController.logger

4、监控Java方法

使用以下命令可以监控Java方法的执行情况:

  • 监控指定方法的执行情况:
$ monitor -c 5 com.example.demo.DemoController hello

其中,-c 5表示监控5次方法执行情况,
com.example.demo.DemoController表示类名,hello表示方法名。

输出:

Monitoring com.example.demo.DemoController#hello for 5 times, interval: 1s, timeout: 300s.
Press Ctrl+C to abort.
  Execution count: 1, Total cost: 43.291 ms, Avg cost: 43.291 ms, Min cost: 43.291 ms, Max cost: 43.291 ms, Exception count: 0, TPS: 23.13/s
  Execution count: 2, Total cost: 41.117 ms, Avg cost: 41.117 ms, Min cost: 41.117 ms, Max cost: 41.117 ms, Exception count: 0, TPS: 24.36/s
  Execution count: 3, Total cost: 39.304 ms, Avg cost: 39.304 ms, Min cost: 39.304 ms, Max cost: 39.304 ms, Exception count: 0, TPS: 25.42/s
  Execution count: 4, Total cost: 41.825 ms, Avg cost: 41.825 ms, Min cost: 39.304 ms, Max cost: 43.291 ms, Exception count: 0, TPS: 23.91/s
  Execution count: 5, Total cost: 42.246 ms, Avg cost: 49.2 ms, Min cost: 39.304 ms, Max cost: 83.554 ms, Exception count: 0, TPS: 24.44/s
  • 监控所有方法的执行情况:
$ monitor -c 5 com.example.demo.DemoController

其中,-c 5表示监控5次方法执行情况,
com.example.demo.DemoController表示类名。

输出:

Monitoring com.example.demo.DemoController for 5 times, interval: 1s, timeout: 300s.
Press Ctrl+C to abort.
  Execution count: 2, TPS: 1.0/s
  Execution count: 2, TPS: 1.0/s
  Execution count: 2, TPS: 1.0/s
  Execution count: 2, TPS: 1.0/s
  Execution count: 2, TPS: 1.0/s

5、查看Java线程信息

使用以下命令可以查看Java线程的信息:

  • 查看当前所有线程:
$ thread

输出:

Id   Group  State         Name
 1    mAIn   RUNNABLE      ...
 2    main   WAITING       ...
 3    main   TIMED_WAITING ...
 4    main   BLOCKED       ...
  • 查看指定线程的信息:
$ thread 1

其中,1表示线程ID。

输出:

Thread[main,5,main]
  java.lang.Object.wait(Native Method)
  java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:144)
  java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:165)
  java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:216)

6、查看Java内存信息

使用以下命令可以查看Java内存的信息:

  • 查看当前Java进程的内存情况:
$ jvm

输出:

Class Loaders: 7
Loaded Classes: 13198
Total Classes: 13241
Heap Memory Usage: init:2621440, used:32950664, committed:54525952, max:3715249152
Non-Heap Memory Usage: init:2555904, used:49171920, committed:51773440, max:-1
  • 查看指定Java类的实例情况:
$ jvm com.example.demo.User

其中,com.example.demo.User表示类名。

输出:

Class: com.example.demo.User
Loaded Count: 1
Instance Count: 1
Total Count: 1

7、调试Java应用

使用以下命令可以在Java应用中进行调试:

  • 打开Java应用的调试端口:
$ jad --source-only com.example.demo.DemoController hello

其中,
com.example.demo.DemoController表示类名,hello表示方法名。

输出:

$ jad --source-only com.example.demo.DemoController hello
Decompiled code of com.example.demo.DemoController#hello is as follows:
  • 使用调试器连接Java应用的调试端口:
$ jdb -attach 127.0.0.1:8000

8、其他命令

除了以上介绍的命令之外,Arthas还提供了一些其他有用的命令,例如:

  • 查看Java类的字节码:
$ sc com.example.demo.DemoController

其中,
com.example.demo.DemoController表示类名。

输出:

Class: com.example.demo.DemoController
ClassLoader: sun.misc.Launcher$AppClassLoader@18b4aac2
Location: file:/Users/arthas/arthas-demo/target/classes/
Code Source: file:/Users/arthas/arthas-demo/target/classes/
Super Class: org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver
  • 查看Java类的加载情况:
$ classloader

输出:

ClassLoader tree:
sun.misc.Launcher$AppClassLoader@18b4aac2
  +- sun.misc.Launcher$ExtClassLoader@6cd87312
  • 查看当前系统的环境变量:
 
$ env

输出:

PATH: /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

查看当前的工作目录:
$ pwd

输出:

/Users/arthas
  • 查看当前的Java版本:
$ version

输出:

openjdk version "1.8.0_212"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_212-b03)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.212-b03, mixed mode)
  • 1.
  • 2.
  • 3.
  • 退出Arthas:
$ quit

输出:

Bye! Enjoy the day, enjoy the life~

以上是Arthas的一些常用命令,可以帮助开发者快速定位和解决Java应用中的问题。当然,Arthas还有许多其他的功能和命令,这里只是介绍了一部分,感兴趣的读者可以查看官方文档或者自行探索。



Tags:Arthas   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
使用阿里 Arthas 工具分析 CPU 飙高
Arthas是阿里开源的 Java 诊断工具,相比 JDK 内置的诊断工具,要更人性化,并且功能强大,可以实现许多问题的一键定位,而且可以一键反编译类查看源码,甚至是直接进行生产代码热修复,...【详细内容】
2023-10-26  Search: Arthas  点击:(269)  评论:(0)  加入收藏
用 Arthas 定位 Spring Boot 接口的超时问题,让应用起飞
一、背景公司有个渠道系统,专门对接三方渠道使用,没有什么业务逻辑,主要是转换报文和参数校验之类的工作,起着一个承上启下的作用。最近在优化接口的响应时间,优化了代码之后,但是...【详细内容】
2023-10-17  Search: Arthas  点击:(262)  评论:(0)  加入收藏
深度解析阿里Arthas:从入门到精通,掌握Java应用问题排查利器
本篇带给大家Arthas的一些常用命令,可以帮助开发者快速定位和解决Java应用中的问题。当然,Arthas还有许多其他的功能和命令,这里只是介绍了一部分。Arthas是阿里开源的一款Java...【详细内容】
2023-03-03  Search: Arthas  点击:(251)  评论:(0)  加入收藏
利用Arthas查找cpu 100%
近几个月,生产项目上某服务运行1个月左右,便会OOM或cpu标识至100%,客户运维要求我们排查,排查了几轮,方案修改了再改,没有收到效果。今天,利用Arthas查找顺利找到原因,简单分享过程...【详细内容】
2022-11-07  Search: Arthas  点击:(648)  评论:(0)  加入收藏
Java线上问题排查神器Arthas实战分析
概述背景是不是在实际开发工作当中经常碰到自己写的代码在开发、测试环境行云流水稳得一笔,可一到线上就经常不是缺这个就是少那个反正就是一顿报错抽风似的,线上调试代码又很...【详细内容】
2022-07-08  Search: Arthas  点击:(496)  评论:(0)  加入收藏
Arthas底层字节增强工具bytekit
简要说明在几次生产环境排查问题中使用到了Arthas,查找了部分资料找到一个关于Arthas底层用于字节增强的工具。主要实现了java字节码文件层次的动态增强,可在不重新编译原java...【详细内容】
2022-07-05  Search: Arthas  点击:(358)  评论:(0)  加入收藏
Alibaba Java诊断工具Arthas查看Dubbo动态代理类
阅读Dubbo源码过程中,会发现,Dubbo消费端在做远程调用时,默认通过 Javassist 框架为服务接口生成动态代理类,调用javassist框架下的JavassistProxyFactory类的getProxy(Invoker...【详细内容】
2022-04-08  Search: Arthas  点击:(470)  评论:(0)  加入收藏
带着8个问题5分钟教你学会Arthas诊断工具
Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception...【详细内容】
2021-08-13  Search: Arthas  点击:(348)  评论:(0)  加入收藏
线上诊断工具-Arthas
性能评估根据github上相关的issues,arthas的定位是问题诊断与排查,只需要在进行问题诊断时运行并attach到进程上即可,其对系统的影响取决于所监控的JAVA进程的并发情况。http:/...【详细内容】
2021-06-29  Search: Arthas  点击:(1201)  评论:(0)  加入收藏
线上debug诊断神器-Arthas
前言当遇到 Java 线上问题时,如 CPU 飙升、负载突高、内存溢出等问题,你需要查命令,查网络,然后 jps、jstack、jmap、jhat、jstat、hprof 等一通操作。而除了这些,Arthas 是一款...【详细内容】
2021-06-25  Search: Arthas  点击:(501)  评论:(0)  加入收藏
▌简易百科推荐
Java 8 内存管理原理解析及内存故障排查实践
本文介绍Java8虚拟机的内存区域划分、内存垃圾回收工作原理解析、虚拟机内存分配配置,以及各垃圾收集器优缺点及场景应用、实践内存故障场景排查诊断,方便读者面临内存故障时...【详细内容】
2024-03-20  vivo互联网技术    Tags:Java 8   点击:(14)  评论:(0)  加入收藏
如何编写高性能的Java代码
作者 | 波哥审校 | 重楼在当今软件开发领域,编写高性能的Java代码是至关重要的。Java作为一种流行的编程语言,拥有强大的生态系统和丰富的工具链,但是要写出性能优异的Java代码...【详细内容】
2024-03-20    51CTO  Tags:Java代码   点击:(24)  评论:(0)  加入收藏
在Java应用程序中释放峰值性能:配置文件引导优化(PGO)概述
译者 | 李睿审校 | 重楼在Java开发领域,优化应用程序的性能是开发人员的持续追求。配置文件引导优化(Profile-Guided Optimization,PGO)是一种功能强大的技术,能够显著地提高Ja...【详细内容】
2024-03-18    51CTO  Tags:Java   点击:(25)  评论:(0)  加入收藏
Java生产环境下性能监控与调优详解
堆是 JVM 内存中最大的一块内存空间,该内存被所有线程共享,几乎所有对象和数组都被分配到了堆内存中。堆被划分为新生代和老年代,新生代又被进一步划分为 Eden 和 Survivor 区,...【详细内容】
2024-02-04  大雷家吃饭    Tags:Java   点击:(57)  评论:(0)  加入收藏
在项目中如何避免和解决Java内存泄漏问题
在Java中,内存泄漏通常指的是程序中存在一些不再使用的对象或数据结构仍然保持对内存的引用,从而导致这些对象无法被垃圾回收器回收,最终导致内存占用不断增加,进而影响程序的性...【详细内容】
2024-02-01  编程技术汇  今日头条  Tags:Java   点击:(68)  评论:(0)  加入收藏
Java中的缓存技术及其使用场景
Java中的缓存技术是一种优化手段,用于提高应用程序的性能和响应速度。缓存技术通过将计算结果或者经常访问的数据存储在快速访问的存储介质中,以便下次需要时可以更快地获取。...【详细内容】
2024-01-30  编程技术汇    Tags:Java   点击:(72)  评论:(0)  加入收藏
JDK17 与 JDK11 特性差异浅谈
从 JDK11 到 JDK17 ,Java 的发展经历了一系列重要的里程碑。其中最重要的是 JDK17 的发布,这是一个长期支持(LTS)版本,它将获得长期的更新和支持,有助于保持程序的稳定性和可靠性...【详细内容】
2024-01-26  政采云技术  51CTO  Tags:JDK17   点击:(89)  评论:(0)  加入收藏
Java并发编程高阶技术
随着计算机硬件的发展,多核处理器的普及和内存容量的增加,利用多线程实现异步并发成为提升程序性能的重要途径。在Java中,多线程的使用能够更好地发挥硬件资源,提高程序的响应...【详细内容】
2024-01-19  大雷家吃饭    Tags:Java   点击:(106)  评论:(0)  加入收藏
这篇文章彻底让你了解Java与RPA
前段时间更新系统的时候,发现多了一个名为Power Automate的应用,打开了解后发现是一个自动化应用,根据其描述,可以自动执行所有日常任务,说的还是比较夸张,简单用了下,对于office、...【详细内容】
2024-01-17  Java技术指北  微信公众号  Tags:Java   点击:(98)  评论:(0)  加入收藏
Java 在 2023 年仍然流行的 25 个原因
译者 | 刘汪洋审校 | 重楼学习 Java 的过程中,我意识到在 90 年代末 OOP 正值鼎盛时期,Java 作为能够真正实现这些概念的语言显得尤为突出(尽管我此前学过 C++,但相比 Java 影响...【详细内容】
2024-01-10  刘汪洋  51CTO  Tags:Java   点击:(75)  评论:(0)  加入收藏
站内最新
站内热门
站内头条