0
点赞
收藏
分享

微信扫一扫

JVM调休小记

首先要明白为什么要进行JVM调优?

  • 对于高QPS(每秒查询率,一台服务器能够响应的查询请求的次数)的项目来说
  • 其将会在堆内存中高度频繁地创建对象,将会触发较为频繁的GC
  • 可以使用jstat命令查看GC的情况
  • jstat -gcutil pid 1000每隔1秒打印一次GC统计信息
  • 首先要找到java进程的pid
  • 通过内置的jps命令去找到pid
  • jps -p :仅输出 pid
  • jps -m : 输出传递给main方法的参数
  • jps -l : 输出主类的完整报名
  • jps -v :输出传递给JVM的参数
  • jstat命令执行结果
  • jstat -gc pid

code

解释

示例数据(单位:字节)

S0C

年轻代中第一个存活区的大小

1024.0

S1C

年轻代中第二个存活区的大小

1536.0

S0U

第一个存活区已用空间

0.0

S1U

第二个存活区已用空间

1024.6

EC

Eden区大小

48640.0

EU

年轻代已经使用Eden区的空间

6530.7

OC

老年代大小

330240.0

OU

老年代已经使用空间

150405.0

PC

永久代大小

177496.0

PU

永久代已经使用空间

171133.4

YGC

从application run到采样时ygc的次数

269

YGCT

从application run到采样时ygc所用的时间

(单位:s)7.096

FGC

从application run到采样时full gc的次数

5

FGCT

从application run到采样时full gc所用时间

(单位:s)1.017

GCT

从application run到采样整个GC用时

(单位:s)8.114

YGC单次GC平均耗时

  • YGCT/YGC = 0.0263 大约26ms

FGC单次GC平均耗时

  • FGCT/FGC = 0.2034 大约200ms

整体GC平均耗时

  • GCT/(YGC+FGC)

如何打印GC log

打印GC log需要在 JVM 启动参数中添加以下参数 -XX:+PrintGCDateStamps :打印GC发生时间戳 -XX:+PrintTenuringDistribution :打印GC发生时的分代信息 -XX:+PrintGCApplicationStoppedTime :打印GC停顿时长 -XX:+PrintGCApplicationConcurrentTime :打印GC间隔的服务运行时长 -XX:+PrintGCDetails :打印GC详情,包括GC前内存等 -XlogGC:../xxx/xxx :指定 GC log 的路径

可以使用 GCeasy 工具分析GC log https://GCeasy.io

参考

举报

相关推荐

0 条评论