2010-03-18 46 views
-2

嗨,我们正在使用unix环境中运行的进程之一的内存异常。如何识别错误(我们发现在我们的java进程中内存泄漏的可能性很小)。所以whatelse我们需要分析找到rootcauasejava中的内存溢出错误

+2

>>我们发现在我们的java进程中内存泄漏的可能性很小 您究竟做了什么来得出这个结论?您是否使用JMX并监视堆使用情况?应用程序试图做什么? – jagamot 2010-03-18 17:22:20

+6

@anil:如果你的Java代码和你的问题以及问题标题一样写得很好,我建议你再仔细看一下代码,以确保它不会泄漏;) – SyntaxT3rr0r 2010-03-18 17:25:29

+2

幸运的是,你不是第一个遇到这个问题的人,所以有关于这个问题的很多问题(和答案):) http://stackoverflow.com/search?q=outofmemoryerror标准答案是:“第一个配置文件(http://java-source.net/open-source/性能分析器)应用程序并根据结果确定内存泄漏或为其提供更多内存“。真的没有其他办法。 – BalusC 2010-03-18 17:37:27

回答

1

我会使用像YourKithomepage)事件探查器,让您可以轻松地查找被分配这么多的内存建议。

在任何情况下,您都应该检查为您的JVM指定了哪些设置,以了解您的程序是否需要更多堆内存。您可以通过指定-X PARAMS设置:

java -Xmx2g -Xms512m 

将开始与JVM最大堆和512MB

0

的起始大小的2Gb的如果没有内存泄漏,那么应用程序需要更多的内存。你是否离开堆内存,或者内存或本地内存?对于堆内存和perm内存,您可以分别使用-Xmx.or -XX:PermSize参数来增加分配。

但首先尝试使用探查器来验证您的应用程序是否真的没有泄漏任何内存。