${JAVA_HOME}./bin目录下有很多jdk自带的jvm监控工具,以下将一一讲解: 1 jps(虚拟机进程状况工具)作用:与linux ps 一致(查找进程),查找的第一个参数即LVMID(也是进程pid),用于后面其他命令行工具的使用。 用法:格式:jps [options] [hostid]示例:jps -l //-q仅输出LVMID;-m输出传递给main()的参数;-l输出主类全名(jar包就输出路径);-v输出启动时jvm参数注:hostid为RMI注册表中注册的主机名。其输出的结果如下图: 分析:jar包加上"-l"会直接输出其路径,其他如tomcat启动的则会输出其入口Boostrap.java的全名。
2 jstat(虚拟机统计信息监控工具)作用:监控虚拟机各种运行状态信息,显示本地/远程虚拟机进程中的类加载、内存、垃圾书记、jit编译等运行数据。 用法:格式:jstat [ option lvmid [interval[s|ms] [count] ]示例:jstat -gcutil 5646 1000 5 //每1000ms执行一次,共执行5次lvmid为5646进程的查询。//-class监视类装载、卸载数量、总空间、耗费时间;-gc监视java堆各区域最大/小使用空间;-gcutil与-gc类似,不过输出百分比;-gcnew;-gcold
3 jinfo(Java配置信息工具)作用:实时查看和调整(使用-flag name=value可在运行期改变虚拟机参数)虚拟机参数。 用法:格式:jinfo [ option ] lvmid示例:jstat 5646 注:上面还有很多相关信息,请自行测试。
4 jmap(Java内存映像工具)作用:获取当前节点的堆转存快照,可用于分析重复引用、内存泄漏等问题 用法:格式:jmap [ option ] lvmid示例:jmap 5646
5 jstack(Java堆栈跟踪工具)作用:- 生成虚拟机当前时刻的线程快照(threaddump/javacore)。- 用于定位线程出现长时间停顿的原因(如死锁、死循环、请求外部资源导致的长时间等待等问题)。怎么用?线程出现停顿的时候通过jstack查看各个线程的调用堆栈,就可以知道没有响应的线程在后台干嘛?等什么资源? 用法:格式:jstack [ option ] lvmid示例:jstack -l 5646//-F正常请求不响应也强制输出;-l除堆栈外,显示关于锁附加信息;-m线程调用本地方法的C/C++的堆栈注:线程堆栈怎么看?如何在现实中差错?更多请关注后续。