jessyzhao 2013-08-26 13:33
浏览 405
已采纳

java垃圾回收器不停的做GC,怎么回事?

最近写了个服务器小程序,开的线程比较多,大约在1000左右吧,高峰期会更多。
今天忽然不停的GC,觉得很纳闷,不知道是怎么一回事,应该如何去做优化?
GC日志如下:一次GC的时间间隔不到一秒,每次GC的时间也不到一秒。
{Heap before GC invocations=306 (full 0):
par new generation total 511936K, used 511872K [0x000000007fff0000, 0x000000009f3f0000, 0x000000009f3f0000)
eden space 511872K, 100% used [0x000000007fff0000, 0x000000009f3d0000, 0x000000009f3d0000)
from space 64K, 0% used [0x000000009f3d0000, 0x000000009f3d0000, 0x000000009f3e0000)
to space 64K, 0% used [0x000000009f3e0000, 0x000000009f3e0000, 0x000000009f3f0000)
concurrent mark-sweep generation total 5632000K, used 145047K [0x000000009f3f0000, 0x00000001f6ff0000, 0x00000001f6ff0000)
concurrent-mark-sweep perm gen total 512000K, used 35276K [0x00000001f6ff0000, 0x00000002163f0000, 0x00000002163f0000)
158889.595: [GC 158889.595: [ParNew: 511872K->0K(511936K), 0.0029090 secs] 656919K->145050K(6143936K), 0.0030557 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
Heap after GC invocations=307 (full 0):
par new generation total 511936K, used 0K [0x000000007fff0000, 0x000000009f3f0000, 0x000000009f3f0000)
eden space 511872K, 0% used [0x000000007fff0000, 0x000000007fff0000, 0x000000009f3d0000)
from space 64K, 0% used [0x000000009f3e0000, 0x000000009f3e0000, 0x000000009f3f0000)
to space 64K, 0% used [0x000000009f3d0000, 0x000000009f3d0000, 0x000000009f3e0000)
concurrent mark-sweep generation total 5632000K, used 145050K [0x000000009f3f0000, 0x00000001f6ff0000, 0x00000001f6ff0000)
concurrent-mark-sweep perm gen total 512000K, used 35276K [0x00000001f6ff0000, 0x00000002163f0000, 0x00000002163f0000)
}
{Heap before GC invocations=307 (full 0):
par new generation total 511936K, used 511872K [0x000000007fff0000, 0x000000009f3f0000, 0x000000009f3f0000)
eden space 511872K, 100% used [0x000000007fff0000, 0x000000009f3d0000, 0x000000009f3d0000)
from space 64K, 0% used [0x000000009f3e0000, 0x000000009f3e0000, 0x000000009f3f0000)
to space 64K, 0% used [0x000000009f3d0000, 0x000000009f3d0000, 0x000000009f3e0000)
concurrent mark-sweep generation total 5632000K, used 145050K [0x000000009f3f0000, 0x00000001f6ff0000, 0x00000001f6ff0000)
concurrent-mark-sweep perm gen total 512000K, used 35276K [0x00000001f6ff0000, 0x00000002163f0000, 0x00000002163f0000)
158893.168: [GC 158893.168: [ParNew: 511872K->0K(511936K), 0.0029313 secs] 656922K->145054K(6143936K), 0.0030717 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
Heap after GC invocations=308 (full 0):
par new generation total 511936K, used 0K [0x000000007fff0000, 0x000000009f3f0000, 0x000000009f3f0000)
eden space 511872K, 0% used [0x000000007fff0000, 0x000000007fff0000, 0x000000009f3d0000)
from space 64K, 0% used [0x000000009f3d0000, 0x000000009f3d0000, 0x000000009f3e0000)
to space 64K, 0% used [0x000000009f3e0000, 0x000000009f3e0000, 0x000000009f3f0000)
concurrent mark-sweep generation total 5632000K, used 145054K [0x000000009f3f0000, 0x00000001f6ff0000, 0x00000001f6ff0000)
concurrent-mark-sweep perm gen total 512000K, used 35276K [0x00000001f6ff0000, 0x00000002163f0000, 0x00000002163f0000)
}

JVM的配置参数如下:
-Xms6000M -Xmx6000M -Xmn500M -XX:PermSize=500M -XX:MaxPermSize=500M -XX:SurvivorRatio=65536 -XX:MaxTenuringThreshold=0 -Xnoclassgc -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=90 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC

  • 写回答

5条回答 默认 最新

  • 李国刚 2013-08-26 16:24
    关注

    这jvm参数是谁给的啊?
    -XX:SurvivorRatio=65536,以为着survivor区非常小,小到几乎可以忽略了。你想象500M*1/65538能有多大啊。这参数默认是8,不知道楼主为什么要这么调。高并发可以调到6。调到65535,完全无法理解。

    -XX:MaxTenuringThreshold=0,这个是新生代晋升到老年代的次数,0次,意味着只要活一次就到老年代了,omg,在高并发的时候可以不调,默认15次很好。不过调为0,真的很难理解,可以调到8试试。
    这是两个大问题。

    在高并发的时候-Xmn500M这个参数可以还大一点,比如1G或1.5G。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!