2011-06-06 46 views
3

在Tomcat上运行的Java Struts应用程序有一些内存错误。有时它会变得缓慢并囤积Tomcat的所有内存,直到它崩溃。我知道如何查找和修复“正常代码错误”,使用测试,调试等,但我不知道如何处理内存错误(我如何重现?我该如何测试?什么是更常见的代码位置会产生内存错误?)。如何调试Java内存错误?

在一个问题:我可以在哪里开始呢?由于

编辑:

由IT部门sended快照(我要生产应用程序无法直接访问)

enter image description here

+1

它如何崩溃?任何线程转储?异常堆栈跟踪? – 2011-06-06 06:36:20

+0

我添加了内存使用情况的快照。他们在任何异常堆栈跟踪之前重启服务器。 – 2011-06-07 07:38:44

回答

5

使用许多“剖析”之一。他们挂接到JVM,可以告诉你的事情怎么样正在每秒创造了许多新对象,他们是什么样的等等

这只是众多之一:http://www.ej-technologies.com/products/jprofiler/overview.html 我用这一个,它的确定。

+0

+1分析器可以解决错误,当问题重现时。如果问题是可重现的,那么这个问题即将得到解决。 – 2011-06-06 06:47:10

+1

@Markus,我会说探查器帮助发现错误,如果他们可以解决它们,我们都将失去工作。 ;) – 2011-06-06 08:09:54

0

如果你的应用程序变得缓慢,你可以创建一个堆转储并将其与系统处于健康状况时创建的另一个堆转储进行比较。寻找更大数据结构的差异。

0

你应该探查下运行它(jprofile或yourkit,例如)一段时间,看看内存/资源使用。也尝试做线程转储。

0

有几个选项探查是其中之一,另一个是转储Java堆到一个文件中,并用特殊的工具进行分析(即IBM JVM提供了一个叫做记忆Analizer非常酷的工具,它呈现的分配极为详细的报告在jvm崩溃时的内存 - http://www.ibm.com/developerworks/java/jdk/tools/memoryanalyzer/)。 第三选项是开始使用JMX服务器服务器启用,并通过JConsole的这种方法,你将能够监测运行时内存ussage /分配连接。 JConsole的配备bin目录下的标准太阳的JDK(这里U可以找到如何通过JConsole中连接到Tomcat - Connecting remote tomcat JMX instance using jConsole

1

http://kohlerm.blogspot.com/ 这是相当不错的介绍了如何使用Eclipse的内存分析器查找内存泄漏。

如果你喜欢的视频教程,尝试youtube,虽然它是Android的具体它是非常丰富的。