我有问题,不知道如何得到一些可能出错的线索。我部署了我的Web应用程序(spring - hibernate - MySQL)并在启动后几秒钟工作正常。我可以浏览这些页面。比所有的请求得到堆栈,什么都没有加载。所有页面都悬挂着。当我输错页面时会出现PageNotFound 404错误。
问题是我在活动进程中有tomcat7.exe,内存随着时间的推移略有增加。所以我怀疑内存泄漏。我如何从tomcat获取内存堆?什么堆分析器最适合找出泄漏?
PS:原来,在ComboPooledDataSource中,maxPoolSize只有15。它增加到200,现在一切正常。
答案 0 :(得分:1)
请看这两个链接:
http://java-source.net/open-source/profilers/jmemprof
http://ctoblog.lucierna.com/ultimate-weapon-lucierna-kill-memory-leaks/
答案 1 :(得分:1)
这里需要一个线程转储。它将为您提供所需的洞察力,以了解Tomcat处理器(TP)线程正在执行的操作以及堆统计信息(假设最近的Sun JVM)。除非您看到高CPU利用率以及内存增长达到最大配置堆大小,否则内存泄漏可能不是您的问题。
更可能是阻塞线程并阻止请求完成的条件,可能是连接池之类的公共资源等。如果您不熟悉读取线程转储输出,则使用线程转储分析应用程序将有所帮助。您还可以考虑启用Tomcat管理器应用程序,它提供一些有用的状态信息(很像Apache服务器状态),并使用jconsole通过JMX监视JVM。