2010-12-02 106 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(只是猜测),我不会感到惊讶。