java - 监控Java内部对象和内存使用情况

标签 java memory out-of-memory tomcat8

我有一个作为 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/

相关文章:

c# - 在 C# 应用程序中使用多线程时出现 OutOfMemory 异常

java - 捕获 IO 异常未执行

java - 内存不足错误,同时在 java 中读取大型 CSV 文件(数百万行)

c++ - 什么时候释放内存?

java - Android:将 ArrayList 转换为 GSON 内存不足

java.lang.OutOfMemoryError : bitmap size exceeds VM budget 错误

java - 处理Servlet中的异常和错误页面

java - 用于 Android 应用程序开发的 Python 或 Java?

memory - 限制可用内存的工具

java - 原生堆android OOM硬件加速