2012-11-22 35 views
0

已在應用程序中指定Linux服務器vm參數(Xmx = 3GB,Xms = 3GB)。通過查看堆轉儲,可以看到已經使用了超過2.9 GB的內存。 32 MB內存用於不可訪問的對象。Linux:Java Web應用程序內存不足,無法響應請求但不拋出OOM?

但是,該應用程序沒有拋出OOM,而是停止了響應。所以有必要手動重啓應用程序。

我可以看到許多線程(96)在堆棧跟蹤中監視某個特定對象的監視器。這有幫助嗎? 2.9 GB空間中的大部分空間都被緩存對象佔用,我認爲這是正常的。 MAT僅將這些緩存對象顯示爲泄漏嫌疑人。

試圖找出是什麼讓它不響應,但看到堆轉儲和堆棧跟蹤沒有看到任何特殊的東西。

+0

只是一個想法:如果您指定*初始*堆大小與*最大值*相同,則可以預計(在您的情況下)2.9Gb的利用率。你嘗試過嗎,例如。 '-Xms = 512M'? –

回答

1

您的應用程序有內存泄漏。試着找到它,有好的工具,如VisualVM

+0

在這種情況下,它應該拋出OOM。我曾嘗試使用VisualVm,​​發現大多數(2.9 GB的內存)都在使用中,但仍然沒有得出任何結論。 –

+0

您必須學習如何使用VisualVM ...在不同的時間拍攝內存快照,並將它們與新對象進行比較。 – Kai

+0

如果已經測試env我會這樣做。但我正在做一個事後分析。 –

0

通常情況下,在OOM應用程序非常緩慢之前。

在你的情況下,你應該通過例子用VisualVM來分析你的應用程序。

+0

我試過了,但它是一個巨大的堆轉儲文件。儘管VisualVm可以在.ini文件上調整Xmx選項後打開它,但什麼都沒發現。而且,應用程序現在運行良好,但我們需要在出現錯誤情況時調查行爲。 –