我试图监视操作系统(LinuUbuntu19.04)分配给我的Java应用程序的总内存(OpenJDK 11.0.4)。
我有两种方法:
ps或cat /proc/<pid>/status | grep VmRSS -XX:NativeMemoryTracking=summary -XX:+UnlockDiagnosticVMOptions -XX:+PrintNMTStatistics和使用总计提交的大小.从这两种方法检索到的数字总是不同的(有时是几兆字节.有时更多)。
我理解的是,操作系统报告的VmRSS大小是进程使用的真正内存,但是为什么Java报告的值不同呢?
如果我希望能够监视Java应用程序的驻留集大小,我是否应该依赖于操作系统报告的大小(VmRSS),我是否可以在JVM中使用一些东西(比如NTM)?理想情况下,我希望能够从自身监控我的Java应用程序的RSS大小..。
发布于 2019-10-17 18:00:44
NMT和RSS数字不同并不奇怪-- JVM和OS使用不同的方法来测量不同的东西。
NMT可以报告much less内存的实际使用情况,也可以报告more内存,而不是从OS的角度报告进程所消耗的内存。我在this answer中解释了原因。
监视Java应用程序中的RSS很简单。您已经知道了/proc/<pid>/status,那么为什么不直接用/proc/self/status代码来阅读呢?(Linux自动将self映射到当前进程ID)。解析/proc/self/stat甚至更容易,因为所有信息都是以预定义格式以一行形式提供的。
还可以像this answer中描述的那样从Java应用程序中获取NMT报告。
https://stackoverflow.com/questions/58430156
复制相似问题