我在使用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