首页 > 编程语言 > 详细

java性能定位

时间:2021-05-11 22:00:13      阅读:15      评论:0      收藏:0      [点我收藏+]

一、线程死锁

二、堆内存(堆溢出)

三、GC(年轻和老年)

jstat(JVM统计监测工具),监控的内容有:类装载、内存、垃圾收集、jit编译的信息。语法格式如下:

jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]

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

 
通常运行命令如下:
jstat -gc 12538 5000
即会每5秒一次显示进程号为12538的java进成的GC情况,
显示内容如下图:
技术分享图片
 技术分享图片
jstat -gcutil 28363 1s 
jstat -gccause pid 1 每格1毫秒输出结果
jstat -gccause pid 2000 每格2秒输出结果
 
jstat -gc 21711 250 4

注:vmid是虚拟机ID,在Linux/Unix系统上一般就是进程ID。interval是采样时间间隔。count是采样数目。比如下面输出的是GC信息,采样时间间隔为250ms,采样数为4

 

要明白上面各列的意义,先看JVM堆内存布局:

技术分享图片
可以看出:

堆内存 = 年轻代 + 年老代 + 永久代
年轻代 = Eden区 + 两个Survivor区(From和To)

字段含义:

S0C、S1C、S0U、S1U:Survivor 0/1区容量(Capacity)和使用量(Used)
EC、EU:Eden区容量和使用量
OC、OU:年老代容量和使用量
PC、PU:永久代容量和使用量
YGC、YGT:年轻代GC次数和GC耗时
FGC、FGCT:Full GC次数和Full GC耗时
GCT:GC总耗时

通过gc判断是否有gc溢出

可以通过每次GC后 各区的占用率发生的变化来判断GC成果:

1、如果FULL GC频繁说明内存已经存在溢出可能或已经溢出,应用处理能力将会下降甚至停摆,因为大量时间在GC上面

2、如果YGC频繁,s0,s1,eden区使用率又没有明显下降,也需要注意,他们中的数据在增长到一定程度时,可能会进入old区,需要观察full gc情况

3、如果每次YGC后,但是s0,s1,eden区内存使用下降明显,一般不会有问题,说明jvm中存在了占比较重的短生命周期对象,能及时回收掉释放给其它请求或任务使用,只要保持获取与释放平衡就不会有太大问题

ps:当创建对象时前区剩余空间不够的时候就会触发YGC,如果回收后还不够则会转移到后一区

 

 

显示内容说明如下(部分结果是通过其他其他参数显示的,暂不说明):
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)         
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)         
S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)         
 
S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)         
EC:年轻代中Eden(伊甸园)的容量 (字节)         
EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)         
OC:Old代的容量 (字节)         
OU:Old代目前已使用空间 (字节)         
PC:Perm(持久代)的容量 (字节)         
PU:Perm(持久代)目前已使用空间 (字节)         
YGC:从应用程序启动到采样时年轻代中gc次数         
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)         
FGC:从应用程序启动到采样时old代(全gc)gc次数         
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)         
GCT:从应用程序启动到采样时gc用的总时间(s)         
NGCMN:年轻代(young)中初始化(最小)的大小 (字节)         
NGCMX:年轻代(young)的最大容量 (字节)         
NGC:年轻代(young)中当前的容量 (字节)         
OGCMN:old代中初始化(最小)的大小 (字节)         
OGCMX:old代的最大容量 (字节)         
OGC:old代当前新生成的容量 (字节)         
PGCMN:perm代中初始化(最小)的大小 (字节)         
PGCMX:perm代的最大容量 (字节)           
PGC:perm代当前新生成的容量 (字节)         
S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比         
S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比         
E:年轻代中Eden(伊甸园)已使用的占当前容量百分比         
O:old代已使用的占当前容量百分比         
P:perm代已使用的占当前容量百分比         
S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节)         
S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (字节)         
ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)         
DSS:当前需要survivor(幸存区)的容量 (字节)(Eden区已满)         
TT: 持有次数限制         
MTT : 最大持有次数限制

java性能定位

原文:https://www.cnblogs.com/uestc2007/p/14756725.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!