Java 诊断神器 arthas 简单使用

248 阅读1分钟

官网:arthas.aliyun.com/doc/

dashboard

  • 第一部分显示JVM中运行的所有线程:所在线程组,优先级,线程的状态,CPU的占用率,是否是后台进程等;
  • 第二部分显示的JVM内存的使用情况;
  • 第三部分是操作系统的一些信息和Java版本号;

image.png

thread

thread命令可以追加的参数

  • id:可以查看指定线程id的堆栈信息;
  • -n value:找出最忙的value个线程,并打印堆栈信息;
  • -b:找出当前正在阻塞其他线程的线程;
  • -i value:指定采样cpu占比的时间间隔,默认为100ms;

打印当前最忙的3个线程的堆栈信息
image.png

trace

方法内部调用路径,并输出方法路径上的每个节点上耗时. 这个方法经常用到,可以查询方法的那个节点用时较长,方便以后优化。

例如:trace com.dy.admin.controller.VideoCommentController getCommnetUser
这个时候就会监听,等待这个方法的调用 来统计时间。
image.png

可以看到, queryPage() 居然调用了快9秒钟,继续往下看
image.png

trace com.dy.admin.service.IVideoCommentService queryPage
image.png

这里就可以很好的看到,针对哪些方法取优化。这样就不用盲目的去找哪些方法耗时长。
image.png

退出 arthas

如果只是退出当前的连接,可以用quit或者exit命令。Attach 到目标进程上的 arthas 还会继续运行,端口会保持开放,下次连接时可以直接连接上。
如果想完全退出 arthas,可以执行stop命令。