【问题标题】:JVM leaking memory outside heap and buffer poolsJVM 在堆和缓冲池之外泄漏内存
【发布时间】:2017-06-10 20:16:05
【问题描述】:

我们有一个 java 应用程序作为长期运行的服务(这个 JVM 的实际正常运行时间为 31 天 3 小时 35 分钟)

由于 Windows 任务管理器,该进程使用 1,075,384,320 B - 将近 1 GB。

JVM 的堆大小限制为 256 MB (-Xmx256m)

内存数据

Memory:
Size: 268,435,456 B
Max: 268,435,456 B
Used: 100,000,000 up to 200,000,000 B

- 这里没有泄漏

缓冲池

Direct:
Count: 137
Memory Used and Total Capacity: 1,348,354 B

Mapped:
Count: 0
Memory Used and Total Capacity: 0 B

- 这里没有泄漏

我的问题:JVM在哪里使用额外的内存?

其他信息:

Java: version 1.8.0_74 32 bit (Oracle)

Classes:
Total loaded: 17,248
Total unloaded: 35,761

Threads:
Live: 273
Live peak: 285
Daemon: 79
Total started: 486,282

重新启动后,进程大小需要几天时间才能增长,因此定期重新启动当然会有所帮助,也许使用较新的 java 版本也可以解决问题,但我想对此行为进行解释, e. G。 111 之前的 1.8.0 中的已知错误,已修复... - 我还没有找到任何东西。

我们在不同的地方使用了大约 350 个这样的装置,所以改变不是那么容易。

【问题讨论】:

  • 用 jvisualvm 看看使用的内存。您可以在 JDK_HOME/bin 中找到它。然后,您可以计算类的活动实例。
  • 以上数据你觉得我去哪儿了?
  • 如您所见,加载的类是 17.248;元空间消耗大约 58 M。
  • @the8472:感谢您的提示,我也找到了这个工具集。目前我正试图了解结果。我当前进程中的本机内存分析声称总共使用了比 taskmanager 显示的更多的内存。

标签: java memory-leaks jvm


【解决方案1】:

不要忘记在服务器模式下运行您的 JVM 以处理长时间运行的任务!

这种内存泄漏的原因是 JVM 在客户端模式下运行。 我们的解决方案在旧的 windows xp 32 位 PC 上运行在几个连锁店中。 此平台上的 JVM 默认为客户端模式。

在大多数情况下,我们运行 JRE 1.8.0_74-32bit。在我们的应用程序中,这个 JVM 会在“线程竞技场空间”中泄漏内存——似乎什么都没有返回。

通过在JVM启动上设置参数-server切换到服务器模式后问题消失了。

【讨论】:

    【解决方案2】:

    堆外内存消耗的常见原因有两个:

    • 您的应用程序或您正在使用的库之一(例如 JDBC 驱动程序)本机执行某些操作(通过 JNI 调用的模块)
    • 您的应用程序或其中一个库以其他方式使用堆外内存,即使用直接缓冲区或“巧妙”地使用 sun.misc.Unsafe

    您可以使用 jcmd as explained here 验证此跟踪本机内存使用情况(您需要重新启动应用程序)。

    【讨论】:

    • 缓冲池(直接或托管)可以由 JVisualvm 或 JConsole (MBeans) 监控 - 内存使用率非常低。 JConsole 中的committed virtual memory 和taskmanager 中的大小匹配,因此JVM“知道”它消耗的内存。我已经启动了一些启用“本机内存跟踪”的安装,我希望通过这种方式找到内存消耗区域。
    • 在等待我新启动的进程变大时,我使用 Sysinternals 的 VMMap 分析了另一个已经很大的进程。 DLL 之间存在大块(几个 300 MB)的“私有数据”。明天我会做一些谷歌的解释。
    • 遗憾的是,我对 Windows 平台上的内存管理已经不熟悉了...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 2015-02-11
    • 1970-01-01
    相关资源
    最近更新 更多