它是 Websphere6.1、Solaris 10、JDK 1.5.0_13 上的 Java Web 应用程序。我们将最大堆大小设置为 1024m。 jmap 显示堆状态是健康的。堆内存使用率仅为 57%。完全没有 OutOfMemory。
但是我们从 ps 中看到了这个 java 进程的非常高的 RSS (3GB)。 pmap显示了一 block 1.9G的私有(private)内存。
3785: /dmwdkpmmkg/was/610/java/bin/java -server -Dwas.status.socket=65370 -X Address Kbytes RSS Anon Locked Pgsz Mode Mapped File ... 0020A000 2008 2008 2008 - 8K rwx-- [ heap ] 00400000 1957888 1957888 1957888 - 4M rwx-- [ heap ] 8D076000 40 40 40 - 8K rw--R [ stack tid=10786 ] ...
它是 native 代码中的 C 堆内存泄漏吗?推荐使用什么方法来找出根本原因?
最佳答案
这Troubleshooting Memory Leaks Sun 的文档可能会帮助您找到高 RSS 的问题,特别是在第 3.4 节中。
当您运行 Websphere 时,也许您可以在您的虚拟机上使用 -memorycheck。详情见here .
这不一定是本地代码泄漏。如果你看here ,在 Solaris 上可能存在文件保持打开的问题。
这只是一堆链接和提示,但可能有助于追踪您的问题。
关于java - 一个带-Xmx1024m的Java进程怎么会占用3GB常驻内存呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/686397/