我们有一个 Tomcat 服务器,为多个 Web 应用程序提供服务。使用 jconsole,我可以看到堆内存随着时间的推移而增长。大约一天后,我们遇到了一些崩溃,堆内存出现 OutOfMemoryError。平台:SLES 12 SP3,Tomcat 8
是否可以使用工具确定我们的哪个 Web 应用程序导致了内存泄漏?
答案1
根据这个答案JVM 不提供此类信息,但是 Tomcat FAQ 指出
话虽如此,内存分析工具可能会证明上述陈述是错误的 - 但您可能不想在生产环境中使用它们。
我不是 Java 专家,但我发现这个答案为你。他们谈论Oracle JRockit 任务控制
无论如何,这都不是一件容易的事,JRMC 会为您提供系统中每个类的内存使用情况。如果您的项目之间有共同的类(如依赖项),则很难确定哪个项目导致了问题,尽管在这种情况下,一个简单的更新可能会解决您的问题。
同一问题中的另一个答案建议使用 IDE(Netbeans)来单独调试项目。
这个答案解释发光根,另一个可以直接附加到 Tomcat 的 Java 分析工具。这是一个例子直方图输出。
如果问题只发生在生产中,请谨慎使用分析工具,它们往往会真正减慢速度。您是否考虑过该问题可能是由 Tomcat 引起的?您是否安装了适用于您的发行版的最新软件包?