在运行于Apache Tomcat的Web应用程序中查找内存泄漏的建议

问题描述

|| 我有一个Axis2 Web服务,该服务刚刚落在客户端站点上,它引发了以下异常:     java.lang.OutOfMemoryError:无法创建新的本机线程 我只是从站点删除日志,但是在此期间,我想知道是否有人知道我可以使用任何监视工具来查找在Tomcat中运行的Web应用程序中的内存泄漏。     

解决方法

        进行堆转储,并使用Eclipse Memory Analyzer对其进行分析。     ,        尝试使用VisualVM。     ,        您可以使用几个步骤来确定内存泄漏。 首先更改Web服务的启动参数。添加行“ 0”,它将在jvm遇到OOM异常时为您捕获堆转储。您可以使用此信息很好地表示内存中的哪些对象正在占用所有可用内存。在等待复制OOM的过程中,您可以查看第二个要添加到启动程序的参数,以下记录了GC活动ѭ1。使用此数据,您可以查看OOM是逐渐发生还是快速发生。 另一个途径是使用像VisualVM这样的程序,该程序可用于配置Web服务。这将附加到正在运行的JVM(最好是在开发环境上),然后尝试进行压力测试以查找问题所在,请尝试JMeter进行压力测试。在您的JAVA_HOME / bin文件夹(v6及更高版本)中找到VisualVM 这也可能不是内存泄漏,而是客户端上比预期更多的负载。查看调整启动参数以提供更多内存(
-Xms
-Xmx
) 除非您的客户可以告诉您在问题发生之前传递给他们的参数,否则您将不得不自己进行一些调查,直到找到更多信息。 丹尼尔(Daniel)已经在他的回答中介绍了jmap,因此我将不赘述