【发布时间】:2011-08-24 11:50:33
【问题描述】:
我在 Tomcat 下运行的 Java 应用程序遇到了一个非常奇怪的问题。
我们尝试在 1 周的 sprint 中从新生成的新代码更新生产代码,该应用程序已经运行了几个月而没有出现任何问题,然后这个新代码使我们的 Linux 服务器在一段时间后开始交换。
非常奇怪的是,当查看 VisualVM 的内存使用情况时,它从未超过最大堆大小,JVM 不会抛出 OutOfMemory,机器只是开始交换,即使在那之后 JVM 也会继续运行。
所以,似乎是从某个地方泄漏了内存,似乎是来自新代码,但奇怪的是它不在 JVM 内部,有什么调试方法的想法吗?
谢谢!
【问题讨论】:
-
可能有助于显示代码。
-
涉及的任何本机代码(通过 JNI 或 JNA),还是纯 Java?
-
可能是由于内存映射文件?
top显示java进程的内存使用情况是什么? -
可能其他东西开始在服务器上运行,占用了足够的 RAM 来强制 unix 开始交换
-
我无法显示一些代码,哈哈,有 400 多个类,从稳定代码到不稳定代码没有任何值得注意的变化,我真的很想知道一些方法来开始调试。
标签: java tomcat memory-leaks