【问题标题】:Using Concurrent Mark Sweep garbage collector with more than 120GB RAM使用大于 120GB RAM 的并发标记清除垃圾收集器
【发布时间】:2012-06-17 20:37:49
【问题描述】:

是否有人设法在具有超过 120GB RAM 的 Hotspot 中使用并发标记扫描垃圾收集器 (UseConcMarkSweepGC)?

如果我将 -ms 和 -mx 设置为 120G,JVM 可以正常启动,但如果我将它们设置为 130G,JVM 会在启动时崩溃。 JVM 在并行收集器和 G1 收集器上启动良好(但它们有自己的问题)。

有没有人设法使用超过 120GB 堆的并发标记扫描收集器?如果是这样,您是否需要做一些特别的事情,或者我只是在这里不走运?

来自 JVM 错误转储的堆栈如下:

Stack: [0x00007fbd0290d000,0x00007fbd02a0e000],  sp=0x00007fbd02a0c758,  free space=1021k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [libc.so.6+0x822c0]  __tls_get_addr@@GLIBC_2.3+0x822c0
V  [libjvm.so+0x389c01]      CompactibleFreeListSpace::CompactibleFreeListSpace(BlockOffsetSharedArray*, MemRegion, bool, FreeBlockDictionary::DictionaryChoice)+0xc1
V  [libjvm.so+0x3d1ae0]  ConcurrentMarkSweepGeneration::ConcurrentMarkSweepGeneration(ReservedSpace, unsigned long, int, CardTableRS*, bool, FreeBlockDictionary::DictionaryChoice)+0x100
V  [libjvm.so+0x49d922]  GenerationSpec::init(ReservedSpace, int, GenRemSet*)+0xf2
V  [libjvm.so+0x48d0b9]  GenCollectedHeap::initialize()+0x2e9
V  [libjvm.so+0x824098]  Universe::initialize_heap()+0xb8
V  [libjvm.so+0x82657d]  universe_init()+0x7d
V  [libjvm.so+0x4cf0dd]  init_globals()+0x5d
V  [libjvm.so+0x80f462]  Threads::create_vm(JavaVMInitArgs*, bool*)+0x1e2
V  [libjvm.so+0x51fac4]  JNI_CreateJavaVM+0x74
C  [libjli.so+0x31b7]  JavaMain+0x97

我已经使用 Oracle (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7175901) 提出了一个错误,但我想知道是否有其他人看到它。

【问题讨论】:

  • 如果可以的话,我会考虑使用更多的堆外内存。我经常使用 200-800 GB 的堆外空间,而最大堆大小为 1 GB,而 GC 基本上处于空闲状态。
  • 谢谢——我打算使用堆外内存。但是,我仍然想尝试大堆大小,看看它们的性能如何。
  • 完整 GC 时间的指南是在永久空间中每 GB 大约 1 秒。 Azul JVM 是完全并发的(对于次要和完整的收集),HotSpot GC 是尽力并发的。 ;)
  • 我想知道您的问题是否不在于 JVM 而是 glibc 中的错误? (这是框架的顶部),毕竟 120GB 的分配各种事情都会开始吱吱作响
  • 开启 -server 时会发生这种情况吗?

标签: java garbage-collection jvm jvm-hotspot concurrent-mark-sweep


【解决方案1】:

这似乎已被 Oracle 接受为错误:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7175901

【讨论】:

    【解决方案2】:

    有同样的问题。我们将 ms 降低到 140 以下,它似乎有效。将 mx 留在 400g 并编写了一个测试程序。

    【讨论】:

    • 恐怕我运气不好——当 JVM 尝试将堆扩展到超过 120G 左右时,它仍然崩溃
    猜你喜欢
    • 2014-11-08
    • 2015-07-13
    • 2019-09-09
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    相关资源
    最近更新 更多