jvm gc(fullgc)的问题

Jaya1989 2014-08-06 08:56:08
jvm主要启动参数

-server -XX:PermSize=64M -XX:MaxPermSize=128m -Xms2g -Xmx2g -Xmn656m -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps


用jstat查看的过程:

mybk@ubuntu169:/opt/gclog$ jstat -gc 24234 2000
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
67136.0 67136.0 28733.5 0.0 537472.0 36425.1 1425408.0 783773.2 65536.0 30758.7 4 1.375 193 3.725 5.100
67136.0 67136.0 28733.5 0.0 537472.0 36425.2 1425408.0 783773.2 65536.0 30758.7 4 1.375 193 3.725 5.100
67136.0 67136.0 28733.5 0.0 537472.0 36425.2 1425408.0 783773.2 65536.0 30758.7 4 1.375 194 3.735 5.110
67136.0 67136.0 28733.5 0.0 537472.0 36425.3 1425408.0 783773.2 65536.0 30758.7 4 1.375 195 3.765 5.140
67136.0 67136.0 28733.5 0.0 537472.0 36425.4 1425408.0 783773.2 65536.0 30758.7 4 1.375 195 3.765 5.140
67136.0 67136.0 28733.5 0.0 537472.0 36425.4 1425408.0 783773.2 65536.0 30758.7 4 1.375 196 3.774 5.149
67136.0 67136.0 28733.5 0.0 537472.0 36425.5 1425408.0 783773.2 65536.0 30758.7 4 1.375 197 3.803 5.177
67136.0 67136.0 28733.5 0.0 537472.0 36425.6 1425408.0 783773.2 65536.0 30758.7 4 1.375 197 3.803 5.177
67136.0 67136.0 28733.5 0.0 537472.0 36425.6 1425408.0 783773.2 65536.0 30758.7 4 1.375 197 3.803 5.177
67136.0 67136.0 28733.5 0.0 537472.0 36425.7 1425408.0 783773.2 65536.0 30758.7 4 1.375 198 3.814 5.188
67136.0 67136.0 28733.5 0.0 537472.0 36425.7 1425408.0 783773.2 65536.0 30758.7 4 1.375 199 3.842 5.217
67136.0 67136.0 28733.5 0.0 537472.0 36425.8 1425408.0 783773.2 65536.0 30758.7 4 1.375 199 3.842 5.217
67136.0 67136.0 28733.5 0.0 537472.0 36425.9 1425408.0 783773.2 65536.0 30758.7 4 1.375 199 3.842 5.217
67136.0 67136.0 28733.5 0.0 537472.0 36425.9 1425408.0 783773.2 65536.0 30758.7 4 1.375 200 3.856 5.230
67136.0 67136.0 28733.5 0.0 537472.0 36426.0 1425408.0 783773.2 65536.0 30758.7 4 1.375 201 3.883 5.258
67136.0 67136.0 28733.5 0.0 537472.0 36426.1 1425408.0 783773.2 65536.0 30758.7 4 1.375 201 3.883 5.258
67136.0 67136.0 28733.5 0.0 537472.0 36426.1 1425408.0 783773.2 65536.0 30758.7 4 1.375 202 3.892 5.267


jvm打印的gc日志

623.120: [GC [1 CMS-initial-mark: 783773K(1425408K)] 848919K(2030016K), 0.0267960 secs] [Times: user=0.02 sys=0.00, real=0.02 secs]
623.147: [CMS-concurrent-mark-start]
623.171: [CMS-concurrent-mark: 0.024/0.024 secs] [Times: user=0.05 sys=0.00, real=0.03 secs]
623.171: [CMS-concurrent-preclean-start]
623.177: [CMS-concurrent-preclean: 0.005/0.005 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
623.177: [CMS-concurrent-abortable-preclean-start]
CMS: abort preclean due to time 628.300: [CMS-concurrent-abortable-preclean: 3.222/5.123 secs] [Times: user=3.19 sys=0.03, real=5.13 secs]
628.300: [GC[YG occupancy: 65146 K (604608 K)]628.300: [Rescan (parallel) , 0.0089220 secs]628.309: [weak refs processing, 0.0000100 secs]628.309: [scrub string table, 0.0005570 secs] [1 CMS-remark: 783773K(1425408K)] 848919K(2030016K), 0.0095880 secs] [Times: user=0.05 sys=0.00, real=0.01 secs]
628.310: [CMS-concurrent-sweep-start]
628.315: [CMS-concurrent-sweep: 0.005/0.005 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
628.315: [CMS-concurrent-reset-start]
628.320: [CMS-concurrent-reset: 0.005/0.005 secs] [Times: user=0.01 sys=0.00, real=0.01 secs]


从上面可以看到,基本每1,2秒就触发一次fullgc,而且各个代内存使用情况基本没有变化。
更主要的是: [GC [1 CMS-initial-mark: 783773K(1425408K)] 并没有达到 -XX:CMSInitiatingOccupancyFraction=70设置的阀值,783773/1425408还不到60%,持久代使用不到50%。为何和一直触发fullgc???求指点
注:上面的gc日志是运行solr的tomcat的日志。
...全文
302 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ljl_ss 2014-10-29
  • 打赏
  • 举报
回复
怎么解决的,楼主可否分析下思路
skgary 2014-08-07
  • 打赏
  • 举报
回复
引用 10 楼 a825395336 的回复:
学生党感觉学了用不到阿
业务量大了自然就会用到。
a825395336 2014-08-07
  • 打赏
  • 举报
回复
学生党感觉学了用不到阿
skgary 2014-08-07
  • 打赏
  • 举报
回复
引用 2 楼 whos2002110 的回复:
jvm打印的gc日志那段你是哪里看到的? 70% 你是怎么得的,我看到网上有相关计算方法, 但没感觉有什么道理
命令行设置了参数就可以看到相关的日志。 先不用算,要了解清楚JVM内存收集的原理,几种方法的不同再去设置和计算。
grapepaul 2014-08-07
  • 打赏
  • 举报
回复
接分
午夜屠猪男 2014-08-07
  • 打赏
  • 举报
回复
Jaya1989 2014-08-07
  • 打赏
  • 举报
回复
散分了,大家也可以谈谈自己在gc方便的经验。
whos2002110 2014-08-07
  • 打赏
  • 举报
回复
引用 4 楼 SMCwwh 的回复:
[quote=引用 2 楼 whos2002110 的回复:] jvm打印的gc日志那段你是哪里看到的? 70% 你是怎么得的,我看到网上有相关计算方法, 但没感觉有什么道理
引用错了,回复见楼上。[/quote] 嗯, 谢了, 回头我自己试下
Jaya1989 2014-08-07
  • 打赏
  • 举报
回复
引用 2 楼 whos2002110 的回复:
jvm打印的gc日志那段你是哪里看到的? 70% 你是怎么得的,我看到网上有相关计算方法, 但没感觉有什么道理
引用错了,回复见楼上。
Jaya1989 2014-08-07
  • 打赏
  • 举报
回复
引用 1 楼 SMCwwh 的回复:
问题找到了,是因为没有配置
-XX:+UseCMSInitiatingOccupancyOnly
参数导致的。。。
gc日志是要配置jvm启动参数的,我没贴出来而已啊
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:/opt/gclog/$(hostname)-${GCNAME}.log
70%是这里设置的
-XX:CMSInitiatingOccupancyFraction=70
根据经验70%是一个比较保守的值,80%有oom风险,看具体应用情况了。
whos2002110 2014-08-07
  • 打赏
  • 举报
回复
jvm打印的gc日志那段你是哪里看到的? 70% 你是怎么得的,我看到网上有相关计算方法, 但没感觉有什么道理
Jaya1989 2014-08-06
  • 打赏
  • 举报
回复
问题找到了,是因为没有配置
-XX:+UseCMSInitiatingOccupancyOnly
参数导致的。。。

50,526

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧