2011-12-12 49 views
0

我有问题,不知道如何获得有关可能出错的一些线索。我部署了我的web应用程序(spring-hibernate-MySQL),并在启动后几秒钟内工作正常。我可以浏览页面。比所有的请求获取堆栈,没有什么是加载。所有页面都悬挂着。当我输入错误的页面时,出现PageNotFound 404错误。在运行时对Tomcat 7进行故障排除

问题是我有tomcat7.exe在活动进程内存随着时间的推移略有增加。所以我怀疑内存泄漏。我如何去从tomcat获取内存堆?什么堆分析仪将是最好的找出泄漏?

PS:原来是在ComboPooledDataSource中maxPoolSize只有15。现在增加到200,一切正常。

回答

1

线程转储是这里的所需要的。它将为您提供Tomcat处理器(TP)线程正在执行的操作以及堆统计信息(假设最新的Sun JVM)所需的信息。除非您看到CPU利用率高,并且内存增长高达最大配置的堆大小,否则内存泄漏可能不是您的问题。

这更可能是一个条件阻塞线程并阻止请求完成,也许是一个共同的资源,如连接池等。使用线程转储分析应用程序将有助于如果你不熟悉读取线程转储输出。您也可以考虑启用Tomcat管理器应用程序,它提供了一些有用的状态信息(很像Apache服务器状态),并使用jconsole通过JMX监视JVM。