与Linux VmRSS和Java NativeMemoryTraking(NMT)的总提交内存的差异
我试图监控操作系统(Linux Ubuntu 19.04)分配给Java应用程序(OpenJDK 11.0.4)的总内存 我采取两种方法:与Linux VmRSS和Java NativeMemoryTraking(NMT)的总提交内存的差异,java,performance,jvm,Java,Performance,Jvm,我试图监控操作系统(Linux Ubuntu 19.04)分配给Java应用程序(OpenJDK 11.0.4)的总内存 我采取两种方法: 使用ps或cat/proc//status中的VmRSS大小| grep VmRSS 使用具有以下属性的Java NativeMemoryTracking功能:-XX:NativeMemoryTracking=summary-XX:+UnlockDiagnosticVMOptions-XX:+PrintNMTStatistics,并使用提交的总大小 从这
- 使用
或ps
cat/proc//status中的VmRSS大小| grep VmRSS
- 使用具有以下属性的Java NativeMemoryTracking功能:
,并使用提交的总大小-XX:NativeMemoryTracking=summary-XX:+UnlockDiagnosticVMOptions-XX:+PrintNMTStatistics
如果我希望能够监视Java应用程序的常驻集大小,那么我是否应该依赖Java应用程序的OS报告大小(VmRSS),我是否可以在JVM中使用一些东西(如NTM)?理想情况下,我希望能够从自身监控Java应用程序的RSS大小 NMT和RSS的数量不同并不奇怪——JVM和操作系统使用不同的方法来衡量不同的事情 NMT可以报告实际使用的内存,也可以从操作系统的角度报告进程消耗的内存。我在信中解释了原因 在Java应用程序中监视RSS很简单。您已经知道了
/proc//status
,那么为什么不直接阅读Java代码中的/proc/self/status
?(Linux自动将self
映射到当前进程ID)。解析更容易,因为所有信息都以预定义格式以单行形式提供
也可以从Java应用程序中获取NMT报告,如中所述。NMT和RSS的数量不同并不奇怪——JVM和操作系统使用不同的方法来衡量不同的事情 NMT可以报告实际使用的内存,也可以从操作系统的角度报告进程消耗的内存。我在信中解释了原因 在Java应用程序中监视RSS很简单。您已经知道了
/proc//status
,那么为什么不直接阅读Java代码中的/proc/self/status
?(Linux自动将self
映射到当前进程ID)。解析更容易,因为所有信息都以预定义格式以单行形式提供
还可以从Java应用程序中获取NMT报告,如中所述