赞
踩
JConsole工具是JDK自带的图形化性能监控工具。 通过JConsole工具, 可以查看Java应用程序的运行概况, 并监控堆信息、 永久区使用情况及类的加载情况等。
本文主要介绍JConsole工具的基本使用方法。
JConsole程序在%JAVA_HOME%/bin目录下,启动后,程序便要求指定连接Java应用程序,如图6.25所示。
在“新建连接”对话框中罗列了所有的本地Java应用程序,选择需要连接的程序即可。在“远程进程”部分还有一个用于连接远程进程的文本框,输入正确的远程进程地址即可连接。
如果需要使用JConsole连接远程进程,则需要在远程Java应用程序启动时加上如下参数:
-Djava.rmi.server.hostname用于指定运行Java应用程序的计算机IP地址,-Dcom.sun.management.jmxremote.port用于指定通过JMX管理该进程的端口号。基于以上配置启动的Java应用程序通过JConsole在远程连接时,只需要输入如下远程进程即可。
在连接上Java应用程序后便可以查看应用程序的概况,如图6.26所示。图中4张折线图分别显示了堆内存的使用情况、系统的线程数量、加载类的数量及CPU的使用率。
切换到“内存”选项卡,JConsole可以显示当前内存的详细信息。这里不仅包括堆内存的整体信息,更细化到了eden区、survivior区及老年代的使用情况,同时也包括非堆区,即永久代的使用情况。单击右上角的“执行GC”按钮,可以强制应用程序进行一次FullGC操作,如图6.27所示。
注意:在JConsole中,可以查看堆的详细信息,包括堆的大小、使用率、eden区大小、survivor区大小及永久区大小等。
JConsole中的“线程”选项卡允许开发人员监控程序内的线程,如图6.28所示。JConsole显示了系统内的线程数量,并在屏幕下方显示了程序中所有的线程。单击线程名称,便可以查看线程的栈信息。
单击“检测到死锁”按钮,还可以自动检测多线程应用程序的死锁情况。图6.29展示了由JConsole检测到的死锁线程。
本例中,应用程序的代码可以参考6.3.6节jstack命令中的示例。
注意:使用JConsole可以方便地查看系统内的线程信息,并且可以快速地定位死锁问题。
JConsole的“类”选项卡如图6.30所示,显示了系统已经装载的类数量,在“详细信息”栏中,还显示了已卸载的类数量。
在“VM摘要”选项卡中,JConsole显示了当前应用程序的运行环境,包括虚拟机类型、版本、堆信息及虚拟机参数等,如图6.31所示。
注意:VM摘要显示了当前Java应用程序的基本信息,如虚拟机类型、虚拟机版本、系统的线程信息、操作系统的内存信息、堆信息、垃圾回收器的类型、JVM参数及类路径等。
MBean选项卡允许通过JConsole进行MBean管理,包括查看或者设置MBean的属性,以及运行MBean的方法等。如图6.32所示为MBean的管理界面,这里选中了Memory的Verbose属性。通过修改Verbose的属性值,可以在程序运行时动态打开或者关闭GC操作的输出信息。
MBean的种类繁多,功能也比较强大,本节将列举几个常用的MBean操作,如表6.2所示。
注意:通过JConsole,可以对Java应用程序中的Mbean进行统一管理。
除了基本功能外,JConsole还支持插件扩展。在JDK的安装目录下就有一个自带的JConsole插件,它位于%JAVA_HOME%\demo\management\JTop下。使用以下命令可以让JConsole加载插件并启动:
JConsole启动后,连接到任意Java应用程序,便可以进入JTop页面,如图6.33所示。
JTop插件按照CPU占用时间进行排序,将占用CPU时间最长的线程显示在表格顶端。通过这个插件,开发人员便能迅速地找到占用CPU时间最长的线程名称,并通过线程快照定位线程代码。
JTop插件的完整源代码都可以在JDK的安装目录下找到,有兴趣的读者可以修改JTop的源码,让它显示更多的线程信息。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。