【问题标题】:How to get maximum memory used by java program如何获取java程序使用的最大内存
【发布时间】:2021-07-03 12:24:15
【问题描述】:

有没有办法在 java 程序运行期间获得在任何给定点使用的峰值内存?到目前为止,我只看到了消耗总内存的解决方案。

【问题讨论】:

  • 有什么区别?你是怎么做到的?您需要有关 Java 堆或整个 Java 进程的信息吗?
  • 你能解释一下堆/进程之间的区别吗? @talex
  • 读取this以获取java进程使用的内存
  • 这将是很长的解释。书中的几章。

标签: java memory memory-management jvm runtime


【解决方案1】:

你可以试试这个 JDK 工具来进行 heap 分析:

  • VisualVM
  • jstat(控制台tool

RSS mem的用法可以在unix上通过命令行工具pstop,或者通过JDK工具找到:

  • jcmd <pid> VM.native_memory detail.diff(java 进程应该用-XX:NativeMemoryTracking=summaryJAVA_OPTS运行)

RSS 峰值使用情况可以在 linux 上的 /proc/<pid>/status 文件中的 VmHWM 字段 (man) 中找到。

【讨论】:

  • 1+ jcmd 是我想添加的,但您的编辑使其过时
  • 本机内存跟踪不包括某些内存区域,例如映射字节缓冲区:stackoverflow.com/questions/53451103/…
  • 提到/proc/<pid>/status字段RssFileVmHWM包括它)和/proc/<pid>/smaps显示mmap mem使用情况。
  • 除了通过 intelliJ 之外,我从未以任何其他方式运行 java。我将如何在 Windows 机器上运行我的代码来获取 RSS 内存/RSS 峰值?
猜你喜欢
  • 2017-08-12
  • 2014-05-09
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 2013-06-26
相关资源
最近更新 更多