我有一个作为Windows服务运行的Java Web服务器。我将Tomcat 8与Java 1.8一起使用。*几个月以来,我发现内存使用量正在迅速增加。我不能确定是堆还是堆栈。该过程开始于〜200MB,大约一周后,它可以达到2GB。不久之后它将生成OutOfMemory异常(内存使用量将为2GB-2.5GB)。这已在多个环境中重复了多次。
我想知道是否有一种方法可以监视进程并查看其内部内存使用情况,甚至可以查看哪些对象使用的内存量最大。可以使用“ Java本机内存跟踪”吗?这将帮助我检测可能导致此问题的任何内存泄漏。
提前致谢。
为了监视Java进程的内存使用情况,我将使用JMX客户端(例如JVisualVM),该客户端与Oracle JDK捆绑在一起:
https://visualvm.java.net/jmx_connections.html
为了确定内存泄漏的原因,我指示JVM在内存耗尽时进行堆转储(在Oracle JVM上,这可以通过指定-XX:-HeapDumpOnOutOfMemoryError
何时启动Java程序来完成),然后分析该堆使用诸如Eclipse MAT之类的工具进行转储。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句