【问题标题】:What are the performance impacts of enabling Java Native Memory Tracking (NMT)?启用 Java 本机内存跟踪 (NMT) 对性能有何影响?
【发布时间】:2019-01-22 04:52:41
【问题描述】:

我正在尝试诊断在 Kubernetes 下的 Docker 中运行的 java 进程的内存问题。

Java 版本为 Java 8 (1.8.0):

root@myHost:/# java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-8u181-b13-2~deb9u1-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)

我看到很多在线讨论和建议and questions on SO 都涉及到Native Memory Tracking 的使用。

如果启用 NMT,预计会对性能或内存使用产生哪些负面影响?

在生产中始终以“详细”级别启用 NMT 是否可行/允许/推荐:

-XX:NativeMemoryTracking=detail

【问题讨论】:

    标签: java


    【解决方案1】:

    来自Oracle Native Memory Tracking for Java 8 documentation

    获取详细数据:要更详细地了解本机内存使用情况,请使用命令行选项启动 JVM:-XX:NativeMemoryTracking=detail。这将准确跟踪哪些方法分配的内存最多。启用 NMT 将导致 5-10% 的 JVM 性能下降,并且 NMT 的内存使用会在所有 malloc 内存中添加 2 个字作为 malloc 标头。 NMT 也会跟踪 NMT 内存使用情况。

    启用 NMT 后,VM.native_memory 的 jcmd 输出实际上会记录由于启用 NMT 而导致的内存分配开销:

    #jcmd 25 VM.native_memory
    25:
    
    Native Memory Tracking:
    
    Total: reserved=2724013KB, committed=1526785KB
    -                 Java Heap (reserved=1048576KB, committed=1048576KB)
                            (mmap: reserved=1048576KB, committed=1048576KB)
    ...
    
        Native Memory Tracking (reserved=6004KB, committed=6004KB)
                            (malloc=384KB #6040)
                            (tracking overhead=5621KB)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-14
      • 2013-09-20
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      相关资源
      最近更新 更多