Valgrind检测java Web应用程序中的内存泄漏

时间:2016-02-04 06:14:53

标签: java memory-leaks valgrind

我有在Tomcat容器中运行的Web应用程序。我被要求调查使用Valgrind来检测内存泄漏。是否可以使用Valgrind来分析Java Web应用程序?如果是,它是否是现有/内置JVM内存分析器的可行选项?我已经运行了JConsole和VisualVM来查看是否有任何内存泄漏并发现没有这样的泄漏。

根据我迄今为止的调查,我发现Valgrind适用于C / C ++应用程序和带有本机代码的Java应用程序(通过JNI)。

虽然在Valgrind网站上提到Valgrind可以用于用任何编程语言编写的程序,但我找不到任何Valgrind用于Java程序的例子。

由于

2 个答案:

答案 0 :(得分:1)

我真的不认为你可以使用Valgrind for Java。 Valgrind检测到的内存泄漏只是:你分配了一些内容并忘了释放它。在Java中,没有free,所以没有什么可忘记的......

有回收的其他资源(文件描述符,直接缓冲区等),但Valgrind并不知道它们。有办法导致内存泄漏,但它们通常涉及一个类加载器,即Valgrind一无所知。

Valgrind检测到的内存泄漏类型在Java中是不可能的(JNI除外)。

答案 1 :(得分:1)

valgrind运行几乎所有生成的代码。来了一点java但是做了这个工作。确保在调试内存泄漏时使用--smc-check = all选项。

通常在任何目标机器上调试c二进制文件,

$ valgrind --tool = memcheck NAME-OF-BINARY-FILE

显示堆摘要,泄漏摘要

的统计信息

类似地,你可以使用附加的--smc-check = all选项为java做。