引言
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. 使用条件表达式
在使用watch
和trace
命令时,可以添加条件表达式,只有满足条件的方法调用才会被记录。
watch com.example.YourClass yourMethod "{params,returnObj}" "params[0]>100"
2. 使用ognl表达式 Arthas支持OGNL表达式(Object-Graph Navigation Language),可以用来表达复杂的逻辑。
ognl '@[email protected]("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对线上问题进行排查时,需要确保操作的精确性和谨慎性,防止对业务造成影响。