我试图诊断在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)我看到很多在线讨论和建议以及对此的质疑都涉及到本机内存跟踪的使用。
如果启用NMT,会对性能或内存使用产生什么样的负面影响?
使NMT在任何时候都处于“详细”级别是否良好/允许/建议:
-XX:NativeMemoryTracking=detail发布于 2019-01-23 03:54:35
获取详细数据:要更详细地了解本机内存使用情况,请使用命令行选项启动JVM:-XX:NativeMemoryTracking=detail。这将准确地跟踪哪些方法分配的内存最多。启用NMT将导致JVM性能下降5-10 %,NMT的内存使用量将增加2个单词到所有malloc内存中作为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)https://stackoverflow.com/questions/54301468
复制相似问题