2010-06-07 41 views
0

我負責維護一臺運行Java EE Web應用程序的服務器。 Jboss 4.0被用作servlet容器,並且JVM啓動的內存足以運行應用程序(我認爲):Java EE項目,內存太多?

if [「x $ JAVA_OPTS」=「x」];然後 JAVA_OPTS = 「 - 服務器-Xms1500m -Xmx1500m -Dsun.rmi.dgc.client.gcInterval = 3600000 -Dsun.rmi.dgc.server.gcInterval = 3600000」 網絡

我必須重新啓動JBoss的日常生活,因爲java進程開始使用大量內存,所以應用程序運行速度很慢。

我只想知道它是否可能是設計問題或jboss配置問題。

PD:我知道我只寫了一些細節,但這就是我所擁有的。

謝謝。

回答

1

使用大量內存沒有根本問題。如果VM大小過大,並且您創建了大量需要垃圾回收的對象,則需要更頻繁地執行GC,這意味着更頻繁地進行全GC。真正大型虛擬機上的完整GC可能會導致「凍結」長達數秒。對於某些應用,這可能是一個真正的問題。在其他人可能不是。

您希望隨時跟蹤虛擬機大小,任何分析器都會這樣做。 VisualVM附帶Java 6u14(iirc)或更高版本,它將執行此操作。如果隨着時間的推移觀看應用程序,您會看到內存量增加,然後突然下降,因爲臨時對象被垃圾收集形成「鋸」模式。

現在隨着時間的推移可能會增加(即整體斜率上升)。這可能會或可能不會表明問題。它可能表明你正在泄漏記憶。這可能意味着你將引用保存在你根本不需要的對象上,因此它們不會被GCed。或者根本沒有問題。這取決於你的應用程序在做什麼。例如,如果您隨着時間的推移在內存中緩存越來越多的數據量,那麼這可能不是泄漏,但它可能表明一個架構問題,因爲您並未刷新緩存。

但是1.5GB的內存不是很多,所以只要讓你的虛擬機的大小和它本身沒有理由讓你每天都必須重新啓動它。這聽起來像你有另一個問題,粘性參考是最有可能的罪魁禍首。