当前位置: 首页 > 知识库问答 >
问题:

与Linux VmRSS的区别及Java NativeMemoryTraking(NMT)的总占用内存

高运诚
2023-03-14

我试图监视操作系统(Linux Ubuntu 19.04)分配给Java应用程序(OpenJDK 11.0.4)的总内存

我同意两项:

  • 使用pscat/proc/ /status grep VmRSS
  • 中的VmRSS大小
  • 使用具有以下属性的Java NativeMemoryTracking功能:-xx:NativeMemoryTracking=summary-xx:+UnlockDiagnosticVmOptions-xx:+PrintNMTStatistics并使用提交的总大小。

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

如果我希望能够监视Java应用程序的驻留集大小,我是否应该依赖于OS报告大小(VmRSS)(我可以使用JVM内部的某些东西(如NTM)?理想情况下,我希望能够从Java应用程序本身监控RSS大小······

共有1个答案

乐正翰
2023-03-14

NMT和RSS数字的不同并不奇怪--JVM和OS使用不同的方法来度量不同的东西。

NMT可以报告比实际使用少得多的内存,或者从OS的角度来看,它也可以报告比进程消耗多得多的内存。我在这个回答中解释了原因。

在Java应用程序中监视RSS很简单。您已经知道/proc/ /status ,那么为什么不直接阅读Java代码中的/proc/self/status呢?(Linux自动将self映射到当前进程ID)。解析/proc/self/stat更容易,因为所有信息都以预定义的格式在一行中提供。

 类似资料:
  • #{}速度快,能防止sql注入,是占位符方式,先预编译,然后填充参数,字符串格式,用户名=(___),参数只是下划线上的内容 ${}是直接拼接到语句上,这种方式需要自己拼括号和参数,但是也可以拼接想执行的任何语句,也就是传说中的sql注入 详情如下 在MyBatis中使用参数进行SQL拼装经常会使用到#{var}和${var}两种参数的设置方式。下面是两种方式的不用之处: #{var} 使用预编译

  • 本文向大家介绍java &与&&的区别及实例,包括了java &与&&的区别及实例的使用技巧和注意事项,需要的朋友参考一下 java &与&&的区别: & 既是位运算符又是逻辑运算符,&的两侧可以是int,也可以是boolean表达式,当&两侧是int时,要先把运算符两侧的数转化为二进制数再进行运算,而短路与(&&)的两侧要求必须是布尔表达式。 我想很多人在学习java的时候,或者面试时都会遇到

  • 本文向大家介绍php中error与exception的区别及应用,包括了php中error与exception的区别及应用的使用技巧和注意事项,需要的朋友参考一下 error与exception的区别查阅网上资料大多是java的解释,貌似php的异常处理过程与java差不多 java中的Object继承结构如下: Object---->Throwable--------> Exception --

  • 本文向大家介绍Python import用法以及与from...import的区别,包括了Python import用法以及与from...import的区别的使用技巧和注意事项,需要的朋友参考一下 在python用import或者from...import来导入相应的模块。模块其实就是一些函数和类的集合文件,它能实现一些相应的功能,当我们需要使用这些功能的时候,直接把相应的模块导入到我们的程序中

  • 本文向大家介绍Java中sleep()与wait()的区别总结,包括了Java中sleep()与wait()的区别总结的使用技巧和注意事项,需要的朋友参考一下 前言 对于sleep()方法,我们首先要知道该方法是属于Thread类中的。而wait()方法,则是属于Object类中的。 sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了

  • 本文向大家介绍title与h1的区别、b与strong的区别、i与em的区别?相关面试题,主要包含被问及title与h1的区别、b与strong的区别、i与em的区别?时的应答技巧和注意事项,需要的朋友参考一下 title 是 网页标题标签 h1 是文本标签 默认与word的h1相似为最大的标题显示 b 为文本加粗标签 与word的加粗功能相似 strong 为强调语气, 也是为文本加粗 与b标签