2014-10-31 20 views
1

我在使用Tomcat的內存消耗方面存在問題。 剛開始後沒有任何反應,但如果某些用戶登錄,在此之後內存使用開始在Edem中增長。 PermGen不增長,但無論如何,它是正常的。 jvisualvm profilingTomcat的內存使用量在IDLE中增長

我的分析顯示線程RMI TCP連接產生大量Object [] char []和String []對象。我不明白什麼是錯的,在哪裏挖。誰啓動這個線程,是postgres連接,這是什麼?

回答

2

你正在觀察你正在觀察:

的JVM收集關於自己的統計信息,並將其發送給您。這會消耗內存並使用RMI傳輸工具。

What is RMI TCP Accept, Attach Listener, and Signal Dispatcher in Visual VM?

我也看不出有什麼形象示人的問題。伊甸園基本上總是增長緩慢,因爲總會有一些消耗內存的工作。

一旦收集到Eden(~200MB左右),你會發現大部分內存都是完全免費的,而且在倖存者空間中很少(〜8MB)結束,因爲可能還有對這些對象的引用。但他們似乎並沒有離開倖存者,因爲OldGen沒有增長,底部的柱狀圖也顯示出典型的倖存者物體達到2級並且消失。

這一切對我來說都很正常。

+0

多數民衆贊成這是正確的,但服務器什麼也不做,沒有人連接到它,並在生產它週期性失敗。 – ekitru 2014-10-31 13:02:16

+1

監視更長時間,您顯示的圖像完全正常。如果有內存泄漏,您會看到OldGen(和/或可能是PermGen)隨着時間的推移而增長。一旦OldGen已滿並且垃圾收集功能不夠用,JVM就會出錯。另請參閱http://stackoverflow.com/questions/542979/using-heapdumponoutofmemoryerror-parameter-for-heap-dump-for-jboss瞭解應該包含實際問題的heapdump。即使您的服務器處於空閒狀態:JVM也具有管理任務,如無論如何都會運行的垃圾回收線程,因此總是存在一點活動。 – zapl 2014-10-31 13:18:07

+0

我發現PermGen OOM生產異常,很棒。 =( – ekitru 2014-10-31 13:54:42

3

這是正常的,不是內存泄漏。對象由用於管理應用程序的線程不斷創建和銷燬。由於JVM垃圾收集器不急於回收未使用的內存,因此會看到內存增加。這種情況會定期發生(基於以前的統計數據)或內存不足時。如果它是一個真正的內存泄漏,那麼在收集之後,您不會看到Eden內存使用率下降到幾乎爲零。內存泄漏顯示爲隨着時間的推移而增加的最低點(在GC之後)。

+0

我同意,但伊甸園的增長相當快而對生產tomcat的任何活動+本地電腦開始出現故障 – ekitru 2014-10-31 13:03:17

+0

你是什麼意思的生產無法啓動/定期失敗了呢?這似乎是一個不同的問題,除非你得到的OutOfMemoryError或JVM被卡住試圖做GC後GC。 – 2014-10-31 13:12:37

+0

其實我不明白OOM異常,但對生​​產,不時的tomcat開始使用99%的CPU負載,而不是responsing了。 – ekitru 2014-10-31 13:16:35