JVM调优

JVM调优

一.CPU过高

1.查看jvm的进程ID,可以通过jps或者ps
jps -lvm
ps -ef | grep Test

2.找出该进程内最耗费CPU的线程
top -Hp 2444

linux下,所有的java内部线程,其实都对应了一个进程id,也就是说,linux上的sun jvm将java程序中的线程映射为了操作系统进程

3.将线程ID转化为16进制
printf “%x\n” 线程ID

4.通过jstack输出进程(2444)的堆栈信息,然后根据16进制的线程ID过滤结果
jstack 2444 >stack.txt
grep 99b stack.txt

二、查看GC情况

命令:jstat -gcutil pid 250 4

参数列表及含义如下:

参数参数含义
S0C年轻代中第一个 survivor 的容量
S1C年轻代中第二个 survivor 的容量
S0U年轻代中第一个 survivor 目前已使用空间
S1U年轻代中第二个 survivor 目前已使用空间
EC年轻代中 Eden 的容量
EU年轻代中 Eden 目前已使用空间
OC老年代的容量
OU老年代目前已使用空间
MC元空间 metaspace 的容量
MU元空间 metaspace 目前已使用空间
YGC从应用程序启动到采样时 年轻代gc 次数
YGCT从应用程序启动到采样时 年轻代gc 所用时间
FGC从应用程序启动到采样时 老年代gc 次数
FGCT从应用程序启动到采样时 老年代gc 所用时间
GCT从应用程序启动到采样时 gc 用的 总时间
>jstat -gcutil 8615 1000 100  
S0C   S1C   S0U   S1U   EC   EU   OC   OU   MC  MU   CCSC   CCSU   YGC  YGCT   FGC   FGCT   GCT    
209664.0 209664.0 6838.6  0.0   1677824.0 1580232.0 2097152.0   737763.4    �      �      4270   97.841  12      1.262   99.103
209664.0 209664.0 6838.6  0.0   1677824.0 1592533.1 2097152.0   737763.4    �      �      4270   97.841  12      1.262   99.103
209664.0 209664.0 6838.6  0.0   1677824.0 1628600.9 2097152.0   737763.4    �      �      4270   97.841  12      1.262   99.103
209664.0 209664.0 6838.6  0.0   1677824.0 1648193.8 2097152.0   737763.4    �      �      4270   97.841  12      1.262   99.103
209664.0 209664.0 6838.6  0.0   1677824.0 1657000.4 2097152.0   737763.4    �      �      4270   97.841  12      1.262   99.103
209664.0 209664.0 6838.6  0.0   1677824.0 1673865.0 2097152.0   737763.4    �      �      4270   97.841  12      1.262   99.103
209664.0 209664.0  0.0   5037.6 1677824.0 29050.1  2097152.0   737938.3    �      �      4271   97.856  12      1.262   99.118
209664.0 209664.0  0.0   5037.6 1677824.0 33389.5  2097152.0   737938.3    �      �      4271   97.856  12      1.262   99.118
209664.0 209664.0  0.0   5037.6 1677824.0 54870.6  2097152.0   737938.3    �      �      4271   97.856  12      1.262   99.118
209664.0 209664.0  0.0   5037.6 1677824.0 69660.5  2097152.0   737938.3    �      �      4271   97.856  12      1.262   99.118
209664.0 209664.0  0.0   5037.6 1677824.0 84031.2  2097152.0   737938.3    �      �      4271   97.856  12      1.262   99.118
209664.0 209664.0  0.0   5037.6 1677824.0 98908.8  2097152.0   737938.3    �      �      4271   97.856  12      1.262   99.118
209664.0 209664.0  0.0   5037.6 1677824.0 104836.5 2097152.0   737938.3    �      �      4271   97.856  12      1.262   99.118
209664.0 209664.0  0.0   5037.6 1677824.0 129248.2 2097152.0   737938.3    �      �      4271   97.856  12      1.262   99.118
209664.0 209664.0  0.0   5037.6 1677824.0 132179.7 2097152.0   737938.3    �      �      4271   97.856  12      1.262   99.118
209664.0 209664.0  0.0   5037.6 1677824.0 150897.4 2097152.0   737938.3    �      �      4271   97.856  12      1.262   99.118

三、分析GC日志

命令:jmap -dump:live, format=b, file=heap.hprof pid

将内存使用情况导出到文件中,常见的 Young GC、Full GC 日志含义如下:

命令:more -f service_gc_20190924103424.log

  • Young GC
> more -f service_gc_20190924103424.log
2019-12-04T13:13:43.880+0800: 1440.321: [GC (Allocation Failure) 2019-12-04T13:13:43.880+0800: 1440.321: [ParNew: 1750912K->78330K(1887488K), 0.0725838 secs] 1803625K->136321K(3984640K), 0.0728766 secs] [Times: user=0.20 sys=0.00, real=0.08 secs] 
2019-12-04T13:15:43.666+0800: 1560.107: [GC (Allocation Failure) 2019-12-04T13:15:43.666+0800: 1560.107: [ParNew: 1756154K->52722K(1887488K), 0.0650971 secs] 1814145K->124148K(3984640K), 0.0654118 secs] [Times: user=0.15 sys=0.00, real=0.07 secs] 
2019-12-04T13:17:37.126+0800: 1673.567: [GC (Allocation Failure) 2019-12-04T13:17:37.126+0800: 1673.567: [ParNew: 1730546K->39545K(1887488K), 0.0468796 secs] 1801972K->120284K(3984640K), 0.0471756 secs] [Times: user=0.12 sys=0.01, real=0.05 secs] 
2019-12-04T13:19:38.723+0800: 1795.164: [GC (Allocation Failure) 2019-12-04T13:19:38.723+0800: 1795.164: [ParNew: 1717369K->16986K(1887488K), 0.0589880 secs] 1798108K->110399K(3984640K), 0.0592766 secs] [Times: user=0.11 sys=0.01, real=0.06 secs] 
2019-12-04T13:21:34.312+0800: 1910.753: [GC (Allocation Failure) 2019-12-04T13:21:34.312+0800: 1910.753: [ParNew: 1694810K->15206K(1887488K), 0.0269209 secs] 1788223K->109852K(3984640K), 0.0272546 secs] [Times: user=0.08 sys=0.00, real=0.03 secs] 
2019-12-04T13:23:29.880+0800: 2026.321: [GC (Allocation Failure) 2019-12-04T13:23:29.881+0800: 2026.321: [ParNew: 1693030K->10283K(1887488K), 0.0246338 secs] 1787676K->107662K(3984640K), 0.0249202 secs] [Times: user=0.07 sys=0.00, real=0.02 secs] 

img

  • Full GC

img

免费的 GC 日志图形分析工具推荐如下:

  • GCViewer:下载 jar 包直接运行
  • gceasy:Web 工具,上传 GC 日志在线使用
  • MAT:Eclipse的MAT工具
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值