引言

Arthas是一个开源的Java诊断工具,由阿里巴巴开发。它主要用于定位应用的性能问题,如监控、追踪、诊断等。Arthas可以在不重启应用的情况下,动态地插拔其功能,非常适合生产环境中的故障排查和性能优化。以下是Arthas的一些实用技巧总结。

安装和启动Arthas

在使用Arthas之前,需要先进行安装。Arthas支持多种安装方式,最快捷的是使用在线安装脚本:

curl -L https://alibaba.github.io/arthas/install.sh | sh

安装完成后,启动Arthas:

java -jar arthas-boot.jar

之后选择你需要诊断的Java进程,Arthas就会附加到该进程上。

常用命令

1. dashboard: 实时查看系统的实时数据面板。

dashboard

2. thread: 查看当前Java进程的线程堆栈信息。

thread

3. jad: 反编译指定的类文件。

jad com.example.YourClass

4. watch: 查看方法的输入输出情况。

watch com.example.YourClass yourMethod "{params, returnObj, throwExp}"

5. trace: 追踪方法内部的调用路径,以及每个调用的耗时。

trace com.example.YourClass yourMethod

6. monitor: 监控方法的调用频率和耗时。

monitor -c 5 com.example.YourClass yourMethod

7. tt: 记录方法的执行信息,并允许条件回放。

tt -t com.example.YourClass yourMethod
高级使用技巧

1. 使用条件表达式 在使用watchtrace命令时,可以添加条件表达式,只有满足条件的方法调用才会被记录。

watch com.example.YourClass yourMethod "{params,returnObj}" "params[0]>100"

2. 使用ognl表达式 Arthas支持OGNL表达式(Object-Graph Navigation Language),可以用来表达复杂的逻辑。

ognl '@java.lang.System@out.println("Hello, Arthas")'

3. 结合管道和grep使用 Arthas的输出可以通过Unix管道和grep等工具进行过滤,方便查找关键信息。

thread | grep "http-nio"

4. 使用异步命令 在分析长时间运行的命令时,可以使用async子命令来异步执行。

async -n 5 trace com.example.YourClass yourMethod
结论

Arthas是Java开发者和运维工程师的强大工具,它的灵活性和强大的诊断能力使得生产问题的诊断变得更加简单。合理利用Arthas的各种命令和技巧,可以极大提升故障排查的效率。

注意事项

虽然Arthas是一个非常强大的工具,但是在使用时还需要注意:

  • 不要在生产环境中长时间运行监控命令,可能会对应用性能产生影响。
  • 使用Arthas对方法进行追踪或监控时,要注意数据的隐私和安全性。
  • 在使用Arthas对线上问题进行排查时,需要确保操作的精确性和谨慎性,防止对业务造成影响。