Java虚拟机(JVM)的自带工具使用详解
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>jps</li><li>jstat 的各种命令</li><li>jinfo</li><li>jmap</li><li>jhat</li><li>jstack</li><li>总结</li></ul></div><p class="maodian"></p><h2>jps</h2><p>JVM进程状态工具,用于查看进程的基本信息。JPS是Java Virtual Machine Process Status Tool的缩写,它是Java提供的一个用于查看所有Java进程的命令行工具。</p>
<ul><li><code>jps</code>: 默认情况下,不带任何参数运行jps将显示所有正在运行的Java进程的PID和主类名。</li><li><code>jps -l</code>: 使用-l选项可以显示完整的包名和类名</li><li><code>jps -m</code>: 使用-m选项可以显示传递给Java进程的启动参数。</li><li><code>jps -v</code>: 使用-v选项可以显示传递给Java进程的完整命令行参数</li></ul>
<p class="maodian"></p><h2>jstat 的各种命令</h2>
<p>jstat 是JVM统计监控工具,用于查看堆、GC(垃圾回收)等详细信息。</p>
<p>jstat -gc : 显示垃圾收集统计信息,包括新生代、老年代、永久代等区域的使用情况和垃圾回收次数。</p>
<p>以下是 jstat -gc 命令的一般用法:</p>
<div class="jb51code"><pre class="brush:java;">jstat -gc <pid>
</pre></div>
<p>其中, 是目标Java进程的进程ID, 是采样间隔(以毫秒为单位), 是要显示的样本数量。如果不指定 和 ,则默认情况下会持续输出垃圾收集统计信息,直到手动停止。</p>
<p>例如,要查看进程ID为12345的Java虚拟机的垃圾收集统计信息,每隔1000毫秒(1秒)采样一次,共采样10次,可以运行以下命令:</p>
<div class="jb51code"><pre class="brush:java;">jstat -gc 12345 1000 10
</pre></div>
<p>这将输出类似以下格式的数据:</p>
<div class="jb51code"><pre class="brush:java;"> S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
0.0 512.0 0.0 0.0 4096.0 4096.0 8192.0 8192.0 1024.0768.02048.0 2048.0 10 0.123 2 0.045 0.168
</pre></div>
<p>每一列的含义如下:</p>
<ul><li><code>S0C</code>: Survivor 0区的容量(字节)</li><li><code>S1C</code>: Survivor 1区的容量(字节)</li><li><code>S0U</code>: Survivor 0区已使用的空间(字节)</li><li><code>S1U</code>: Survivor 1区已使用的空间(字节)</li><li><code>EC</code>: Eden区的容量(字节)</li><li><code>EU</code>: Eden区已使用的空间(字节)</li><li><code>OC</code>: Old区的容量(字节)</li><li><code>OU</code>: Old区已使用的空间(字节)</li><li><code>MC</code>: Metaspace区的容量(字节)</li><li><code>MU</code>: Metaspace区已使用的空间(字节)</li><li><code>CCSC</code>: Compressed Class Space区的容量(字节)</li><li><code>CCSU</code>: Compressed Class Space区已使用的空间(字节)</li><li><code>YGC</code>: 年轻代垃圾回收次数</li><li><code>YGCT</code>: 年轻代垃圾回收总耗时(秒)</li><li><code>FGC</code>: Full GC次数</li><li><code>FGCT</code>: Full GC总耗时(秒)</li><li><code>GCT</code>: 垃圾回收总耗时(秒)</li></ul>
<p>jstat中的其他命令:</p>
<ul><li><code>jstat -gccapacity</code> : 显示各个内存区域的容量。</li><li><code>jstat -gcutil</code> : 显示垃圾收集统计信息的百分比形式,更直观地展示内存区域使用情况。</li><li><code>jstat -gccause</code> : 显示最后一次垃圾回收的原因。</li><li><code>jstat -gcnew</code> : 显示新生代的垃圾收集统计信息。</li><li><code>jstat -gcold</code> : 显示老年代的垃圾收集统计信息。</li><li><code>jstat -gcpermcapacity</code> : 显示永久代的容量。</li><li><code>jstat -compiler</code> : 显示即时编译器的编译统计信息。</li><li><code>jstat -printcompilation</code> : 显示即时编译器的编译请求和编译耗时。</li></ul>
<p class="maodian"></p><h2>jinfo</h2>
<p>Java配置信息工具,可以查看配置参数信息,还支持部分参数的运行时修改。</p>
<p>使用jinfo命令查看Java应用程序的运行时属性,可以输入以下命令,其中 pid是Java应用程序的进程ID 并输出对应名称的参数:</p>
<div class="jb51code"><pre class="brush:java;">jinfo-flag name<pid>
</pre></div>
<p class="maodian"></p><h2>jmap</h2>
<p>Java内存映射工具,用于分析堆内存,还能够dump堆内存快照。</p>
<div class="jb51code"><pre class="brush:java;">jmap -histo 23173
</pre></div>
<p>该命令将会显示进程ID为23173的Java进程的堆内存中各个对象的数量和占用的内存大小。</p>
<p>这个命令可以帮助开发者了解当前Java进程的内存使用情况,从而找出潜在的内存泄漏或者优化内存使用。</p>
<p class="maodian"></p><h2>jhat</h2>
<p>Java堆分析工具,用于解析堆内存的dump文件。当使用jmap或其他方法生成Java的堆文件后,可以使用jhat进行分析。</p>
<p>运行jhat命令后,它会解析堆转储文件并启动一个Web服务器,用户可以通过浏览器访问并查看堆的情况。</p>
<p>在HTML页面上,jhat提供了多种功能,如显示所有类包括平台类、从根集能引用到的对象、显示每个类的实例数量、堆实例的分布表以及执行对象查询语句等。</p>
<p>jhat一般与jmap搭配使用,用于分析jmap生成的堆转储快照。</p>
<p class="maodian"></p><h2>jstack</h2>
<p>Java堆栈跟踪工具,用于查看Java程序的堆栈信息,可以用来分析线程问题(如死锁)。</p>
<p>jstat提供了多种命令选项,可以详细查看堆内存各部分的使用量以及加载类的数量。</p>
<p>例如,使用jstat -class可以查看类加载统计信息,包括加载类的数量、所占用的空间大小以及未加载类的数量和所占用的空间。</p>
<div class="jb51code"><pre class="brush:java;">jstat -class 23173
#显示如下:
LoadedBytesUnloadedBytes Time
19595 40567.9 10 10.3 8.20
</pre></div>
<p>jstat -compiler则用于显示JIT编译器的编译统计信息,包括编译数量、失败数量等。</p>
<p>jstat还可以用于监控垃圾回收情况。</p>
<p>例如:</p>
<p>使用jstat -gc可以查看年轻代和老年代的垃圾回收次数、回收消耗时间以及堆内存的使用情况。</p>
<p>通过这些统计信息,开发者可以了解JVM中垃圾回收器的行为,从而优化应用程序的性能。</p>
<p class="maodian"></p><h2>总结</h2>
<p>以上为个人经验,希望能给大家一个参考,也希望大家多多支持琼殿技术社区。</p>
<div class="art_xg">
<b>您可能感兴趣的文章:</b><ul><li>JVM(Java Virtual Machine,Java虚拟机)的作用详解</li><li>JVM调整java虚拟机可使用的最大内存的方法</li><li>Java中的JVM虚拟机内存分配详解</li><li>Java虚拟机JVM栈溢出的问题解决</li><li>深入了解JVM(Java虚拟机)内存结构</li><li>Java JVM虚拟机调优详解</li><li>java为什么需要虚拟机jvm原理详解</li></ul>
</div>
</div>
<!--endmain-->
頁:
[1]