首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与Linux VmRSS的区别和Java NativeMemoryTraking的总内存(NMT)

与Linux VmRSS的区别和Java NativeMemoryTraking的总内存(NMT)
EN

Stack Overflow用户
提问于 2019-10-17 10:14:24
回答 1查看 427关注 0票数 1

我试图监视操作系统(LinuUbuntu19.04)分配给我的Java应用程序的总内存(OpenJDK 11.0.4)。

我有两种方法:

  • 使用来自pscat /proc/<pid>/status | grep VmRSS
  • 的VmRSS大小,使用具有以下属性的功能:-XX:NativeMemoryTracking=summary -XX:+UnlockDiagnosticVMOptions -XX:+PrintNMTStatistics和使用总计提交的大小.

从这两种方法检索到的数字总是不同的(有时是几兆字节.有时更多)。

我理解的是,操作系统报告的VmRSS大小是进程使用的真正内存,但是为什么Java报告的值不同呢?

如果我希望能够监视Java应用程序的驻留集大小,我是否应该依赖于操作系统报告的大小(VmRSS),我是否可以在JVM中使用一些东西(比如NTM)?理想情况下,我希望能够从自身监控我的Java应用程序的RSS大小..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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报告。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58430156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档