我在使用Java 7 JVM的服务器上运行Apache Storm拓扑。我一直在考虑一些JVM调优,并注意到它目前正在使用并发标记和扫描(CMS)垃圾收集器。这是有道理的,因为服务器有32个内核,并且在使用此设置运行多个JVM时,它只运行4个这样的JVM,它少于32个内核。什么时候有人会在多核计算机上使用单个线程与CMS垃圾收集器?
但是,我注意到我们正在运行垃圾回收器,设置CMSConcurrentMTEnabled
变成off。默认情况下,将该设置转换为,,这让我想知道为什么有人会选择在其他线程可用时使用单个线程进行并发垃圾收集。在什么情况下使用该设置是有意义的,假设其他线程可用?
(编辑对我目前的情况更详细,有希望,这将导致一个答案):
的JVM中似乎正在失去的记忆,反复进行轻微的GC是正在〜9每一秒,并最终崩溃。没有OutOfMemoryError
已被抛出,这让我感到困惑。次要的GC每次清理几个kB,总体使用率在一段时间内徘徊在100%左右。堆大小为4 GB,因此这些条件应触发OutOfMemoryError
。然而,我担心,这正在进入SO问题的非常局部的情况。
明显的问题:你有哪些促使你在过去的任何性能或内存的问题来改变默认设置JVM? – fge
我正在寻找那个;我不是那个设置原始设置的人。我们目前正在调查内存问题。 – BlackVegetable
你能定义“内存问题”吗?是那些定期触发'OutOfMemoryError'的类型?你有没有一个测试环境可以让你测试你的环境? – fge