Arthas的能力有哪些?详细说说你平时使用了哪些?

1 个回答

  • 彩鳞
    快乐出现的时候,就好好享受快乐。
    Arthas 是一款强大的 Java 诊断工具,广泛应用于定位和解决线上 Java 应用的性能问题。Arthas 主要用于解决运行时无法通过日志或监控工具轻易发现的问题,尤其是在应用表现异常时(如 CPU 100%、内存泄漏、线程死锁等),Arthas 能提供深入的分析能力。下面详细介绍 Arthas 的核心功能与能力: ### 1. **`dashboard`:全局监控面板** `dashboard` 命令展示了当前 Java 应用的整体健康状态,包括: - **CPU 使用率**:展示 CPU 使用最高的进程和线程。 - **内存使用情况**:堆内存、非堆内存、线程数量等关键指标。 - **线程状况**:展示线程的运行状态(如 RUNNABLE、BLOCKED 等)。 #### 示例: ```bash dashboard ``` 输出示例如下: ``` ID NAME GROUP PRIORITY STATE %CPU TIME INTERRUPT DAEMON 13 Reference Handler system 10 WAITING 0 0:00:00 true true 14 Finalizer system 10 WAITING 0 0:00:00 true true 15 Signal Dispatcher system 9 RUNNABLE 0 0:00:00 true true ``` ### 2. **`thread`:线程状态分析** `thread` 命令可用于查看线程的状态,帮助分析线程问题,比如: - **高 CPU 消耗的线程**。 - **线程死锁**:查看哪些线程被阻塞,或者发生了死锁。 #### 常用命令: ```bash thread -n 3 # 查看 CPU 使用最高的前三个线程 thread -b # 查看当前被阻塞的线程 ``` ### 3. **`trace`:方法调用链跟踪** `trace` 命令可以动态追踪指定类和方法的调用链,并且展示方法执行的时间。它可以帮助开发人员分析性能瓶颈,尤其是那些耗时长的调用。 #### 示例: ```bash trace com.example.MyClass myMethod # 追踪指定方法的调用 ``` 输出示例: ``` `---[500ms] com.example.MyClass.myMethod() `---[450ms] com.example.MyClass.someMethod() `---[200ms] com.example.OtherClass.otherMethod() ``` 显示了方法 `myMethod` 的执行时间以及它调用的其他方法的耗时情况。 ### 4. **`watch`:方法返回值与耗时监控** `watch` 命令可以监控指定方法的输入参数、返回值以及方法执行时间,帮助在生产环境中对特定方法的执行效果进行实时监控。 #### 示例: ```bash watch com.example.MyClass myMethod returnObj # 监控方法返回值 ``` 输出示例: ``` Condition : true Class : com.example.MyClass Method : myMethod Return object : java.lang.String Object : Hello World ``` ### 5. **`jad`:反编译 Java 类** `jad` 命令可以将已加载的类进行反编译,方便查看当前类的源代码。这在分析线上问题时非常有用,尤其是当无法直接获取源代码时。 #### 示例: ```bash jad com.example.MyClass # 反编译类 ``` 输出示例: ```java public class MyClass { public String myMethod() { return "Hello World"; } } ``` ### 6. **`tt`:方法调用快照记录** `tt` 命令(Time Tunnel)可以捕获指定方法的调用快照,支持对方法执行前、执行后进行分析。它能捕获多次方法调用的历史记录,帮助开发人员分析历史执行状态。 #### 示例: ```bash tt -t com.example.MyClass myMethod # 捕获方法的调用快照 tt -l # 列出所有捕获的快照 tt -i 1000 # 查看 ID 为 1000 的快照 ``` ### 7. **`heapdump`:生成堆转储文件** `heapdump` 命令可以生成当前 JVM 的堆转储文件(heap dump),帮助分析内存使用情况。这在解决内存泄漏、分析内存溢出问题时非常有用。 #### 示例: ```bash heapdump /tmp/heapdump.hprof # 生成 heap dump 文件 ``` ### 8. **`profiler`:性能分析** `profiler` 命令基于 Async-profiler,支持对应用的 CPU 或性能瓶颈进行分析,生成火焰图,帮助识别性能热点。 #### 示例: ```bash profiler start # 启动性能分析 profiler stop # 停止性能分析并生成火焰图 ``` ### 9. **`sc`:查看类信息** `sc`(Search Class)命令可以查找并列出 JVM 中已加载的类的信息,包括类的加载器、类名、类的加载状态等。 #### 示例: ```bash sc -d com.example.MyClass # 查看类详细信息 ``` 输出示例: ``` class-info : com.example.MyClass class-loader : AppClassLoader code-source : file:/app/myapp.jar ``` ### 10. **`sm`:查看类的方法信息** `sm`(Search Method)命令可以查看指定类中所有方法的信息,包括方法签名、访问修饰符、参数类型等。 #### 示例: ```bash sm com.example.MyClass # 查看类的所有方法 ``` 输出示例: ``` public java.lang.String myMethod() public void anotherMethod(int, java.lang.String) ``` ### 11. **`jvm`:查看 JVM 信息** `jvm` 命令可以查看当前 JVM 的配置信息,包括内存使用、GC 配置、系统属性等信息。 #### 示例: ```bash jvm ``` 输出示例: ``` Heap Memory Usage: init = 256.0MB, used = 128.0MB, committed = 256.0MB, max = 512.0MB GC: G1 Garbage Collector JVM Arguments: -Xms256m -Xmx512m ``` ### 12. **`getstatic`:查看类的静态变量** `getstatic` 命令可以查看指定类的静态变量值,帮助分析某些关键静态变量的当前状态。 #### 示例: ```bash getstatic com.example.MyClass staticField ``` ### 13. **`ognl`:执行 OGNL 表达式** `ognl` 命令可以在运行时执行 OGNL(Object-Graph Navigation Language)表达式,操作 Java 对象并输出结果。 #### 示例: ```bash ognl '@java.lang.System@currentTimeMillis()' # 获取当前系统时间 ``` ### 14. **`mc`:内存编译** `mc`(Memory Compiler)命令允许直接在内存中编写并编译 Java 代码,可以用于快速测试小代码段。 #### 示例: ```bash mc -c com.example.Test "public class Test { public String hello() { return 'Hello World'; } }" ``` ### 总结 Arthas 提供了非常丰富的工具集,用于 Java 程序的运行时诊断,包括线程监控、方法跟踪、性能分析、内存调试等。无论是 CPU 占用过高、线程死锁还是内存泄漏等问题,Arthas 都能为开发者提供强大的支持,并且不需要停止应用即可进行实时调试,非常适合线上问题的快速定位和修复。
    编辑于 2024-11-28 03:04 •IP属地 美国
    举报
    评论
    收藏