Java 如何诊断Tomcat7中的OutOfMemoryErrors?

Java 如何诊断Tomcat7中的OutOfMemoryErrors?,java,tomcat,jakarta-ee,tomcat7,Java,Tomcat,Jakarta Ee,Tomcat7,我有几个应用程序在Tomcat7实例中运行 偶尔,我会注意到日志中有OutOfMemoryErrors 我怎样才能发现,理想情况下是哪个应用程序-哪个类导致了它们 更新1 25.12.2014 11:44 MSK: 我在应用程序中做了一些更改,在servlet上下文被破坏时向Quartz调度器添加了一个关闭调用,这可能导致内存泄漏 现在我的内存消耗图表如下所示 它们中是否有任何一个表示应用程序中存在内存泄漏 如果是,哪一个?您可以使用jmap。它将提供java过程的快照 内存中有多少对象以及对象

我有几个应用程序在Tomcat7实例中运行

偶尔,我会注意到日志中有OutOfMemoryErrors

我怎样才能发现,理想情况下是哪个应用程序-哪个类导致了它们

更新1 25.12.2014 11:44 MSK:

我在应用程序中做了一些更改,在servlet上下文被破坏时向Quartz调度器添加了一个关闭调用,这可能导致内存泄漏

现在我的内存消耗图表如下所示

它们中是否有任何一个表示应用程序中存在内存泄漏


如果是,哪一个?

您可以使用jmap。它将提供java过程的快照

内存中有多少对象以及对象的大小

jmap -histo #processID

您可以使用jmap。它将提供java过程的快照

内存中有多少对象以及对象的大小

jmap -histo #processID

这方面有很好的文档

使用上面链接中描述的vm参数创建heapdump。 例如,使用memoryanalzyer分析此堆转储。
这方面有很好的文档

使用上面链接中描述的vm参数创建heapdump。 例如,使用memoryanalzyer分析此堆转储。 OOM的发生有很多原因

一,。内存泄漏

二,。生成大量局部变量等

OOM是内存泄漏的常见指示。本质上,当没有足够的空间分配新对象时,就会抛出错误

很少有异常消息

java.lang.OutOfMemoryError:java堆空间 java.lang.OutOfMemoryError:PermGen空间 java.lang.OutOfMemoryError:请求的数组大小超过VM限制 java.lang.OutOfMemoryError:请求的字节数。交换空间不足? java.lang.OutOfMemoryError:本机方法 更详细的信息和

参考和

需要分析堆转储/线程转储等

OOM的发生有很多原因

一,。内存泄漏

二,。生成大量局部变量等

OOM是内存泄漏的常见指示。本质上,当没有足够的空间分配新对象时,就会抛出错误

很少有异常消息

java.lang.OutOfMemoryError:java堆空间 java.lang.OutOfMemoryError:PermGen空间 java.lang.OutOfMemoryError:请求的数组大小超过VM限制 java.lang.OutOfMemoryError:请求的字节数。交换空间不足? java.lang.OutOfMemoryError:本机方法 更详细的信息和

参考和

需要分析堆转储/线程转储等


请记住,它通常不会像一个单独的类那样简单;如果你深入研究这一点,你可以用最少的隧道视野来完成。OutOfMemory的出现也可能是出于合理的原因——堆不够大,无法满足所有加入应用程序在特定峰值时刻所需的数量。请记住,它通常不会像单个类那样简单;如果你深入研究这一点,你可以用最少的隧道视野来完成。OutOfMemory的出现也可能是出于合理的原因——堆不够大,无法满足所有加入的应用程序在特定峰值时刻所需的数量。