java虚拟机学习之(九)虚拟机性能监控与故障处理工具

作为java程序开发人员,在程序开发过程中或者程序开发完成之后,总是避免不了需要对自己开发的代码进行各种测试,寻找各种bug,对程序进行优化。一听到bug和优化,很多人包括我自己都会感到头皮发麻,我们总是期望自己写的代码近乎完美,没有bug且性能优越,但这常常是事与愿违,总免不了折腾。下面介绍一些常用的工具,以帮助我们更快的完成代码的调试调优工作。

1.JDK的命令行工具

很多java开发人员肯定知道JDK的bin目录有“java.exe”,“javac.exe”这两个命令行工具,但是并非所有的程序员都了解JDK的bin目录下还提供了很多小巧方便的命令行应用程序,这些应用程序可以很方便的帮助我么获取我们需要的虚拟机信息,它们具有强大的功能,能在处理应用程序性能问题、定位故障时发挥很大的作用。

常用的JDK监控课故障处理工具:

1).jps:虚拟机进程状态工具,显示指定系统内所有虚拟机进程

jps命令格式:jps [options] [hostid]

jps工具主要选项:

-q    只输出LVMID(Local Virtual Machine Identifier),省略主类的名称

-m    输出虚拟机启动时传递给主类main()函数的参数

-l    输出主类的全名,如果进程执行的是jar包,输出jar路径

-v    输出虚拟机启动时JVM参数

2).jstat:虚拟机统计信息监测工具,收集虚拟机各方面的运行数据

jstat是用于监视虚拟机各种运行状态信息的命令行工具,他可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。

jstat 命令格式:jstat [option vmid [interval[s|ms] [count]]],参数interval和count代表查询间隔和次数,如果省略这两个参数表示只查询一次。如:jstat -gc 2224 250 20 表示查询进程2224垃圾收集情况,每隔250毫秒查询一次,一共查询20次。

jstat 工具主要选项:

-class    监视类装载、卸载数量、总空间以及类装载所耗费的时间

-gc        监视java堆状况,包括Eden区,两个Survivor区,老年代,永久代等的容量,已用空间等

-gcew    监视新生代GC状况

-gcold    监视老年代GC状况

3).jinfo:java配置信息工具,显示虚拟机配置信息

实时查看和调整虚拟机各项参数

4).jmap:java内存映像工具,生成虚拟机的内存转储快照(heapdump文件)

jmap的作用不仅仅是生成转储快照文件,它还可以查询finalize()执行队列,java堆和永久代的详细信息,如空间使用率,当前使用的是哪种收集器等。

jmap命令格式:jmap [option] vmid

jmap工具主要选项:

-dump    生成堆转储快照

-heap        显示java堆详细信息,如使用哪种收集器,分代状况等

5).jhat:虚拟机堆转储快照分析工具,用于分析heapdump文件,它会建立一个HTTP/html服务器,让用户可以在浏览器上查看分析结果(不常用)
6).jstack:java堆栈跟踪工具,显示虚拟机的线程快照

jstack命令格式:jstack [option] vmid

jstack工具主要选项:

-F    当正常输出的请求不被响应时,强制输出线程堆栈

-l    除堆栈外,显示关于锁的附加信息

-m    如果调用到本地方法的话,可以显示c/c++的堆栈

2.JDK的可视化工具

JDK中除了提供大量的命令行工具外,还有两个功能强大的可视化工具:JConsole和Visual VM。

1).JConsole:java监视与管理控制台

JConsole是一种基于JMX的可视化监视、管理工具。该工具能够自动搜索出本机运行的所有虚拟机进程,不需要用户自己在使用jps来查询。启动JConsole后,双击选中某个进程后即可开始监控。主要包括内存、线程、类等的监控。


2).VisualVM:多合一故障处理工具

VisualVM是到目前为止随JDK发布的功能最强大的运行监视和故障处理程序,除了运行监视,故障处理外,该工具还提供了很多其它功能,如性能分析等。




猜你喜欢

转载自blog.csdn.net/qq_28044241/article/details/79625467