jhat 在剖析完成后,利用HTTP做事器展示其剖析结果。在浏览器中访问http://localhost:7000/,结果如图所示。
在默认页中,jhat 做事器显示了所有的非平台类信息。单击链接进入,可以查看选中类的超类、ClassLoader 以及该类的实例等信息。此外,在页面底部,jhat还为开拓职员供应了其他查询办法(Other Queries)。
通过这些链接,开拓者可以进一步查看所有类信息(包括Java平台的类)。所有类的实例数量以及实例的详细信息。末了,还有一个链接指向OQL查询界面。
图中显示了在jhat中,查看Java运用程序里java.lang.String类的实例数量:
单击 instances 链接可以进一步查看 String 工具的实例,如图所示:
常日,导出的堆快照信息可以非常大,由于信息太多,可能很难通过页面上大略的链接索引找到想要的信息。为此,jhat还支持利用OQL语句对堆快照进行查询。实行 OQL 措辞的界面非常简洁,如图所示。利用OQL查询出当前Java程序中所有java.io.File工具的路径。OQL如下:
select file.path.value.toString() from java.io.File file
1.6 jstack命令jstack 可用于导出Java运用程序的线程堆栈。语法为:
jstack [-l] <pid>
-l选项用于打印锁的附加信息。
jstack 工具会在掌握台输出程序中所有的锁信息,可以利用重定向将输出保存到文件,如:
jstack -l 16196 >e\deadlock.txt
通过 jstack 工具不仅可以得到线程堆栈,它还能自动进行去世锁检讨,输出找到的去世锁信息。
1.7 jstatd命令之前所述的工具中,只涉及到监控本机的Java运用程序。而在这些工具中,一些监控工具也支持对远程打算机的监控(如:jps、jstat)。为了启用远程监控,则须要合营利用jstatd工具。
命令jstatd是一个RMI做事端程序,它的浸染相称于代理做事器,建立本地打算机与远程监控工具的通信。jstatd做事器将本机的Java运用程序信息通报到远程打算机。
直接打开jstatd做事器可能会抛出访问谢绝非常:
这是由于jstatd程序没有足够的权限所致,可以利用Java的安全策略,为其分配相应的权限,下面代码为jststd分配了最大的权限,将其保存在jstatd.all.policy文件中:
grant codebase \"大众file:${java.home}/../lib/tools.jar\公众 {permission java.security.AllPermission;};
然后,利用以下命令再次开启jstatd做事器:
jstatd -J-Djava.security.policy=c:\jstatd.all.policy
做事器即可开启成功。
-J参数是一个公共的参数,如jps、jstat等命令都可以接管这个参数。由于jsp、jstat命令本身也是Java运用程序,-J参数可以为jps等命令本身设置其JVM参数。
默认情形下,jstatd 将在1099端口开启RMI做事器:
利用jps命令显示远程打算机的Java进程:
jps localhost:1099
利用jstat命令显示远程进程460的GC情形:
jstat -gcutil 460@localhost:10991.8 hprof工具
hprof不是独立的监控工具,它只是一个Java agent工具,它可以用于监控Java运用程序在运行时的CPU信息和堆信息。利用 java -agentlib:hprof=help 命令可以查看hprof 的帮助文档。下面是 hropf 工具帮助信息的输出:
利用hprof工具可以查见地式中各个函数的CPU占用韶光。以下代码包含3个方法,分别占用不同的CPU韶光:
public class HProfTest { public void slowMethod(){ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } public void slowerMethod(){ try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } } public void fastMethod(){ try { Thread.yield(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { HProfTest hProfTest = new HProfTest(); hProfTest.fastMethod(); hProfTest.slowMethod(); hProfTest.slowerMethod(); }}
利用参数-agentlib:hprof=cpu=times,interval=10运行以上代码。times选项将会在Java函数的调用前后记录函数的实行韶光,进而打算函数的实行韶光。hprof=cpu是针对cpu统计韶光。interval=10 采样10次。程序运行后会创造多了一个文本文件java.hprof.txt,打开后查看部分输出如下,可以很随意马虎看到运行韶光最长的函数:
利用参数-agentlib:hprof=heap=dump,format=b,file=e:\core.hprof 运行程序,可以将运用程序的堆快照保存在指定文件 e:\core.hprof 中。利用MAT或者Visual VM等工具可以拆这个堆文件。
利用参数 -agentlib:hprof=heap=sites 运行程序,可以输出Java运用程序中各个类所占的内存百分比,部分输出如下:
2.JConsole工具
JConsole(Java Monitoring and ManagementConsole)工具时JDK自带的图形化性能监控工具。通过JConsole工具,可以查看Java运用程序的运行概况,监控堆信息、永久区利用情形、类加载情形等。本节紧张先容JConsole工具的基本利用方法。
2.1 JConsole连接Java程序
JConsole 程序在%JAVA_HOME%/bin目录下,双击启动后,程序便哀求指定连接Java运用程序,如图所示。
在罗列确当地Java运用程序选择PID为15908的程序,连接。
如果须要利用JConsole连接远程进程,则须要在远程Java运用程序启动时,加上如下参数:
-Djava.rmi.server.hostname=127.0.0.1 #远程做事器的ip地址-Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.port=8888 #指定jmx监听的端口-Dcom.sun.management.jmxremote.authenticate=false #是否开启认证-Dcom.sun.management.jmxremote.ssl=false #是否开启ssl
基于以上配置启动的Java运用程序,通过JConsole在远程连接时,只须要填写如下远程进程即可:
127.0.0.1:8888
2.2 Java程序概况
在连接上Java运用程序后,便可以查看运用程序概况。
2.3 内存监控
切换到内存监控页面,JConsole 可以显示当前内存的详细信息。这不仅是包括堆内存的整体信息,更细化到eden区、survivior 区、老年代的利用情形。同时,也包括非堆区,即永久代的利用情形,如图所示,单机界面右上角的“实行GC”按钮,可以逼迫运用程序进行一次Full GC。
2.4 线程监控
JConsole 中的线程选项卡许可开拓职员监控程序内的线程,如图所示。JConsole 显示了系统内的线程数量,并在屏幕下方,显示了程序中所有的线程。单击线程名称,便可以查看线程的栈信息。
利用最下方的“监测去世锁”按钮。还可以自动监测多线程运用程序的去世锁情形。
2.5 类加载情形
JConsole的类页面如图所示,显示了系统以及装载的类数量。在详细信息栏中,还显示了已卸载的类数量。
2.6 虚拟机信息
在VM择要页面,JConsole 显示了当前运用程序的运行环境。包括虚拟机类型、版本、堆信息以及虚拟机参数等。
2.7 MBean管理
MBean页面许可通过JConsole进行MBean的管理,包括查看或者设置MBean的属性、运行MBean的方法等。下图是MBean的管理界面,这里选中了Memory的Verbose属性。通过修正Verbose的属性值,可以在程序运行时动态打开或者关闭GC的输出信息。
MBean种类繁多。紧张的操作如下:
2.8 利用插件
除了基本功能之外,JConsole还支持插件扩展。在JDK的安装目录下,就有一个自带的JConsole插件。利用以下命令可以让JConsole加载插件并启动:
jconsole -pluginpath C:\Java\jdk1.6.0_22\demo\management\JTop\JTop.jar
JConsole启动后,连接到任意Java运用程序,便可以进入JTop页面。
作者:像风一样原文:https://www.cnblogs.com/yueshutong/p/9812464.html