2010-12-02 104 views
2

我想收集有關我們遇到的偶爾問題的信息,在幾個星期的操作後,應用程序變慢,工作正常,速度變慢,工作正常,間隔時間變慢,工作變得越來越短。我的理論是,隨着時間的推移,我們更頻繁地收集垃圾。其他關鍵信息是我們偶爾會遇到OOM PermGen問題。Java:'終身'記憶和permgen一樣嗎?

我把啓用詳細:gc,現在看到catalina.out中的GC輸出。我想我需要添加PrintGCDetails標誌,然而,根據這裏的信息:

http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html

啓用後標誌將打印出的「終身」內存收集的信息。問題是,導致PermGen錯誤的內存是不是有點不同?如果它不同,我如何記錄顯示PermGen空間的信息?

編輯 - 不幸的是,我無法在此環境中附加任何jvm監視工具。

編輯 - 我加入了說的配置選項,以及一個用於打印tenuring分配,我得到這樣

27.701: [GC 27.701: [ParNew 
Desired survivor size 2162688 bytes, new threshold 4 (max 4) 
- age 1: 1906560 bytes, 1906560 total 
- age 2:  2064 bytes, 1908624 total 
- age 3:  5064 bytes, 1913688 total 
- age 4:  650368 bytes, 2564056 total 
: 35684K->2678K(38336K), 0.0068580 secs] 224179K->191173K(1065664K), 0.0069700 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 

東西的ParNew代PermGen的空間?

(concurrent mode failure): 25387K->31940K(1027328K), 0.2983200 secs] 50714K->31940K(1065664K), [CMS Perm : 35273K->35139K(35392K)], 0.2985210 secs] [Times: user=0.30 sys=0.00, real=0.30 secs] 
(concurrent mode failure): 25356K->31941K(1027328K), 0.3032690 secs] 50861K->31941K(1065664K), [CMS Perm : 35264K->35129K(35392K)], 0.3034800 secs] [Times: user=0.30 sys=0.00, real=0.31 secs] 

失敗都困擾着我。

Thanx預先

+0

您可以啓用JMX並使用VisualVM觀看Vm ... – ZeissS 2010-12-02 15:49:05

+0

@ZeissS,這不是我們環境中的選項,所有內容都被鎖定:( – hvgotcodes 2010-12-02 15:52:29

回答

4

終身和PermGen是不一樣的,沒有。它們是相關的,但不是相同的東西。確切的細節取決於你正在使用的JVM中的實現,但是從你鏈接的文檔中獲得:

「與終身代相關的第三代是永久代,永久代是特殊的,因爲它持有虛擬機需要的數據來描述在Java語言層次上不具有等價性的對象,例如描述類和方法的對象存儲在永久代中。「

Interned字符串和類的細節等通常存儲在PERM中,而長壽Java對象是TENURED。

這裏是一個體面的文章,解釋PermGen的(以及如何調整它):http://blogs.oracle.com/jonthecollector/entry/presenting_the_permanent_generation

+0

非常感謝您的鏈接)我確實錯過了任期對比permgen澄清在我發佈的文章中,我沒有看到有關獲取jvm轉儲permgen信息的任何內容 - 我是否也錯過了這個鏈接? – hvgotcodes 2010-12-02 16:52:41

1

你實習的任何字符串或加載任何類?

我已經吃掉了兩個東西,就是當你實習的時候,你應該不會這樣做(因此會讓各種各樣的無法收集的字符串變成一堆)以及由於加載新類而導致的舊類定義Tomcat重新部署,十幾次後可能會發生這種情況)。

我似乎記得Tomcat 6在重新部署問題上表現更好,而7本應該修復它,但那已經不在我的頭上了。

您是否使用任何外部庫或本機代碼庫?如果他們泄露的資源對抗permgen(只是猜測),我不會感到驚訝。