2012-08-24 42 views
2

我的web应用程序在tomcat服务器上工作,但在som时间之后,内存使用量开始增长并增长,直到服务器停机。tomcat中的内存泄露

这种情况只发生在现场,当我尝试在本地重现这种情况时,并没有发生。我尝试使用JProfiler进行远程配置文件,并在服务器关闭之前发现了很多字节[]。服务器开始占用越来越多的内存后,它会下降2-3分钟,所以我不能在代码中看到哪些项目使用byte [],因为Heap漫步需要更多时间(Web应用程序非常大)。

我将不胜感激任何帮助或建议。

+1

将'-XX:+ HeapDumpOnOutOfMemoryError -XX:HeapDumpPath =“/ tmp”'添加到您的'java'参数中,等待转储并导入JProfiler –

回答

0

建议:在您的类中放入少量内存使用量转储,其中包含HashMap,Vector(或这些集合的非同步版本)的缓存存储字段,通常是那些保留引用。比我会把一个加url,这将转储我的变量,如:

Runtime.getRuntime()。callMemoryFunctionForgotName():使用的内存是270mb ...例如。 - 在这里你应该看到WHEN正在增长,随着时间的推移,有一些行动,其中一个已经泄露。

当侦测到action9的link43会产生内存泄漏不是很容易:)
  • 只需添加几hashMap.count()或大小(
    • )(忘了这也笑)到LOGG,比你会看到20个藏品中的哪一个正在增加而不是减少。希望您有访问服务器日志的权限。

    所以我会分两步做。