Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与Linux VmRSS和Java NativeMemoryTraking(NMT)的总提交内存的差异_Java_Performance_Jvm - Fatal编程技术网

与Linux VmRSS和Java NativeMemoryTraking(NMT)的总提交内存的差异

与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,并使用提交的总大小 从这

我试图监控操作系统(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
    ,并使用提交的总大小
从这两种方法检索到的数字总是不同的(有时只有几兆字节,有时更多)

据我所知,OS报告的VmRSS大小是进程使用的实际内存,但为什么Java NTM报告的值不同


如果我希望能够监视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报告,如中所述