性能分析2~jstat命令

       上一篇文章top命令,估计大家并没有感觉到top命令有啥用,这一篇文章我们结合jstat命令来讲解一下;个人习惯,上来直接讲理论已经不适合我这种很难静下心来的同志了,我们直接看实例:

假设我们使用top命令发现进程id为15813的进程运行有问题,我们继续使用jstat命令来分析:


上面的信息是这个进程的jvm信息,我们一一介绍:

S0C:Survivor space 0 区大小 (其他环境显示:S0  — Heap上的 Survivor space 0 区已使用空间的百分比)

S1C:Survivor space 1 区大小 (其他环境显示:S1— Heap上的 Survivor space 1 区已使用空间的百分比)

S0U:Survivor space 0 区已经使用大小;

S1U:Survivor space 1 区已经使用大小;

EC:eden区大小 (其他环境显示:E   — Heap上的 Eden space 区已使用空间的百分比)

EU:eden区已经使用大小

OC:老年代区大小(其他环境显示:O   — Heap上的 Old space 区已使用空间的百分比)

扫描二维码关注公众号,回复: 9233425 查看本文章

OU:老年代已经使用大小

PC:永久代区大小(其他环境显示:P— Perm space 区已使用空间的百分比)

PU:永久代区已经使用大小

YGC — 从应用程序启动到采样时发生 Young GC 的次数

YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)

FGC — 从应用程序启动到采样时发生 Full GC 的次数

FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)

GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)

根据上面的这些信息,我们能分析出该进程的运行情况,gc频率和时间是否正常,各个代的使用是否正常、分配的空间是否合理等等,关于jvm的一些信息,可以参考我的jvm专栏。


分析完一个实例后,我们再看定义:

JSTAT命令:(JVM统计监测工具)

一般的top指令基本上满足不了这样的需求,因为它主要监控的是总体的系统资源,很难定位到java应用程序。

Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内

建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级、的

专门针对JVM的工具,非常适用。Jstat是一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用

量。jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id

和所选参数。

语法结构:
Usage: jstat -help|-options
       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

 参数解释:
Options — 选项,我们一般使用 -gcutil 查看gc情况
vmid    — VM的进程号,即当前运行的java进程号
interval– 间隔时间,单位为秒或者毫秒
count   — 打印次数,如果缺省则打印无数次

分析完定义,我们再来分析我给的截图的性能分析:

很显然,我给的截图只是我本地的运行环境,根本没有什么压力,所以这个截图展示的进程运行很正常,yong-gc的次数38此,full-gc

次数7次,并且这两种gc所耗费的时间、以及单次gc的时间都在可接受范围的。

我们暂时不深入在出现性能问题时,如何优化,因为目前我也只懂点皮毛,以后懂得多了再分享。

上面的截图,看起来太长,我们可以单独只查询部分区域的情况:


jstat   -gcnew pid:查询new对象的信息

jstat   -gcold   pid:查询old对象的信息

这样我们能更清楚的观测每个区域的使用情况。

还有一些有用的选项:

Options选项
-class:统计class loader行为信息
-compile:统计编译行为信息
-gc:统计jdk gc时heap信息
-gccapacity:统计不同的generations(不知道怎么翻译好,包括新生区,老年区,permanent区)相应的heap容量情况
-gccause:统计gc的情况,(同-gcutil)和引起gc的事件
-gcnew:统计gc时,新生代的情况
-gcnewcapacity:统计gc时,新生代heap容量
-gcold:统计gc时,老年区的情况
-gcoldcapacity:统计gc时,老年区heap容量
-gcpermcapacity:统计gc时,permanent区heap容量
-gcutil:统计gc时,heap情况
-printcompilation:在Java的方法被编译时,打印其跟踪信息




发布了142 篇原创文章 · 获赞 345 · 访问量 45万+

猜你喜欢

转载自blog.csdn.net/zhengchao1991/article/details/77488026