我在RHEL 5.4上使用JDK-1.6.0_23版本运行Tomcat-6.0.32。我运行的应用程序超过15个。应用程序仅是小型应用程序我的RAM是8GB,交换是12GB。我将堆大小从512Mb设置为4GB。
问题是运行几个小时或几天后,tomcat虽然已启动并正在运行,但仍未提供服务。虽然我可以看到catalina.out日志文件,但它显示内存泄漏问题。
现在,我担心的是我需要显示该问题的解决方案,或者至少我需要突出显示导致内存泄漏的应用程序。
有人可以解释我如何发现哪个应用程序导致内存泄漏问题?
答案 0 :(得分:1)
一种选择是使用堆转储(请参阅How to get a thread and heap dump of a Java process on Windows that's not running in a console)并稍后分析堆转储。
或者另一种选择是使用jmap,VisualVM等类似工具直接分析流程。
答案 1 :(得分:0)
您可以使用jmap / jhat工具的组合(这些工具从Java 8开始都不受支持)来收集堆转储(使用mmap)并识别堆中的顶层对象(使用jhat)。尝试将这些对象与应用程序联系起来,并识别流氓对象。