2012-11-16 19 views
0

我最近了解到-XX:+HeapDumpOnOutOfMemoryError VM參數,並被告知它應該被添加到HotSpot JVM中,因爲它默認是關閉的。我的一位同事發表評論說,也許我們不應該這樣做,因爲他聽說這樣做有一些缺陷,但他不記得它是什麼。我討厭那種含糊不清的言論,但在做出最終決定之前,我試圖做我的盡職調查,所以我正在做一些調查。熱點JVM選項HeapDumpOnOutOfMemoryError - 任何問題?

我能找到的大部分參考資料都是關於如何使用它(以及轉儲文件所在的位置)的更多信息,並且不會說與使用它有關的任何問題。這太問題指的是不同的說法,但答案似乎相關的這一個,以及和暗示,有沒有問題:Why is this Hotspot JVM option not the default? -XX:+PrintConcurrentLocks

有誰知道有什麼理由不把-XX:+HeapDumpOnOutOfMemoryError

回答

1

主要的缺點是它會在每次發生此錯誤的新程序(第一次發生該JVM)時創建一個大文件。如果你有一堆2GB的文件,它可以創建一個每次都很大的文件,用你不需要的堆轉儲填充磁盤空間。由於它僅用於調試/開發目的,因此對大多數最終用戶無用。

+0

我對你的評論感到困惑,它只對調試/開發有用。如果我們在生產系統中遇到OutOfMemory錯誤,我們是不是需要堆轉儲? – sdoca

+1

只有當您有軟件開發人員的支持。並非所有的Java應用程序用戶都能夠分析堆轉儲,例如小程序用戶。 –

+0

我們將在運行我們(我的團隊)編寫的企業軟件的JVM上啓用此功能。我們可以完全訪問我們的服務器,包括根據需要清理轉儲文件的能力。 – sdoca

1

有了這個特殊的標誌,我不認爲有任何問題(不知道其他標誌)。這甚至不是診斷標誌。它只是在JVM遇到OutofMemoryError時打印GC/Memory狀態(只發生一次,而JVM停止時也會發生)。您需要接受

的一件事是,預期它可能(或)可能無法正常使用,因爲它是-XX和與某某指定

選項並不穩定,可能有變化恕不另行通知

+0

我讀到關於我鏈接到的SO問題上不穩定的部分。這是不是啓用它的原因? – sdoca

+0

@sdoca:通過啓用它,您不會失去任何功能,但是不能保證此標誌是否生成正確的堆轉儲(或)。我猜你也可以在生產系統中啓用,但正如Peter所回答的那樣,您需要經常清理堆轉儲日誌,否則可能會導致磁盤空間不足。 – kosa

+0

謝謝。根據我對彼得的回答的評論,我們有能力根據需要清理轉儲文件。 – sdoca