我的 Web 应用程序在 tomcat 服务器中运行,但经过一段时间后,内存使用量开始增长,直到服务器出现故障。
这仅发生在现场,当我尝试在本地重现这种情况时并没有发生。我尝试使用 JProfiler 远程分析,并在服务器关闭之前发现了很多字节 []。服务器在开始占用越来越多的内存后会停机 2-3 分钟,所以我看不到代码中使用 byte[] 的项目,因为 Heap walk 需要更多时间(网络应用程序真的很大)。
我将不胜感激任何帮助或建议。
我的 Web 应用程序在 tomcat 服务器中运行,但经过一段时间后,内存使用量开始增长,直到服务器出现故障。
这仅发生在现场,当我尝试在本地重现这种情况时并没有发生。我尝试使用 JProfiler 远程分析,并在服务器关闭之前发现了很多字节 []。服务器在开始占用越来越多的内存后会停机 2-3 分钟,所以我看不到代码中使用 byte[] 的项目,因为 Heap walk 需要更多时间(网络应用程序真的很大)。
我将不胜感激任何帮助或建议。
建议:在您的类中放置一些内存使用转储,其中缓存存储字段与 HashMap、Vector(或这些集合的非同步版本)通常保持引用。比我放一个加号 url,它将转储我的变量,例如:
Runtime.getRuntime().callMemoryFunctionForgotName():已用内存为 270mb ... 例如。- 在这里你应该看到何时增长,随着时间的推移有行动,其中之一有泄漏。
所以我会分两步做。