我有一个作为 Windows 服务运行的 Java Web 服务器。 我使用 Tomcat 8 和 Java 1.8.* 几个月来,我发现内存使用量增长得相当快。我无法确定它是堆还是堆栈。 该过程开始时约为 200MB,大约一周后,它可以达到 2GB。 不久之后就会产生OutOfMemory异常(内存使用量为2GB - 2.5GB)。 这已在多个环境中重复多次。
我想知道是否有一种方法可以监视进程并查看其内部内存使用情况,甚至可以查看哪些对象使用最多的内存。 可以使用“Java native 内存跟踪”吗? 这将帮助我检测可能导致此问题的任何内存泄漏。
提前致谢。
最佳答案
为了监视 Java 进程的内存使用情况,我将使用 JMX 客户端,例如 JVisualVM,它与 Oracle JDK 捆绑在一起:
https://visualvm.java.net/jmx_connections.html
为了确定内存泄漏的原因,我会指示 JVM 在内存不足时进行堆转储(在 Oracle JVM 上,这可以通过在启动 Java 程序时指定 -XX:-HeapDumpOnOutOfMemoryError
来完成) ,然后使用 Eclipse MAT 等工具分析堆转储.
关于java - 监控Java内部对象和内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37641033/