一般Java程序在服务器运行时,如果我们采用的是Oracle的JDK,则可以通过JVisualVM、jmc、JConsole等JDK提供的监控工具来对运行的程序做监控、分析、诊断;即使运行环境没有图形界面(无图形界面的Linux)时,仍可通过XManager中将JVisualvm重定向到一个Windows桌面也是可以监控的,参见【文章】; 但是如果程序运行环境没有采用的OpenJDK的话则没有这些监控工具可用; 此时就可以通过Arthas工具来实现对线上正在运行的程序做监控、分析、诊断;
还有一种情况,虽然是Windows环境,采用的也是Oracle的JDK,但是JVisualVM、jmc、JConsole等JDK提供的监控工具都不显示本机运行的java进程,以管理员身份运行也不行,此时就可以采用Arthas的as.bat [进程ID]来实现监控java程序
以Windows为例来演示,Linux也是一样的(只有启动脚本是.sh,Windows是.bat)
一、下载Arthas运行环境
参照上图,下载arthas-bin.zip;
二、获取目标运行程序的进程ID
进程ID为1564
三、启动Arthas监控1564进程
第一次启动前要设置好JAVA_HOME的系统环境变量
#D:\work\soft\arthas-bin是arthas-bin.zip的解压目录
D:\work\soft\arthas-bin>as.bat 1564
回车后即可进入arthas命令行操作界面
#执行dashboard命令后会每少刷新一次,按Ctrl+C退出dashboard,回到arthas命令模式
[arthas@1564]$ dashboard
四、[重点]导出运行程序的堆栈信息到txt文本文件中
[arthas@1564]$ thread -n 1000 >> D:/work/soft/arthas-bin/thread-dump.txt
五、[重点]输出运行程序的所有线程状态