监视 Java 堆使用情况

Monitor Java heap usage

我要监视各个节点的 JVM 内存利用率。 该工具 (JON 3.3) 具有不同的指标,如初始 heap/non 堆、已提交 heap/non 堆、已用堆/非堆、最大 heap/non 堆使用。 我决定监控used heap和committed heap的使用情况来观察JVM的内存性能。

是否足以监视提到的参数,如果不够的话,除了已使用和已提交的堆之外,还应监视哪些其他参数usage.Please 关于此的建议。

enter image description here

  • init

    表示Java虚拟机在启动时向操作系统申请内存管理的初始内存量(以字节为单位)。 Java 虚拟机可能会向操作系统请求额外的内存,也可能随着时间的推移向系统释放内存。 init 的值可能未定义。

  • used

    表示当前使用的内存量(以字节为单位)。

  • committed

    表示保证可供Java虚拟机使用的内存量(以字节为单位)。提交的内存量可能会随时间变化(增加或减少)。 Java 虚拟机可能会向系统释放内存,并且提交的内存可能少于 init。 committed 将始终大于或等于 used。 max 表示可用于内存管理的最大内存量(以字节为单位)。它的值可能未定义。如果已定义,最大内存量可能会随时间变化。如果定义了 max,则使用和提交的内存量将始终小于或等于 max。如果内存分配尝试增加已用内存,即使已用 <= max 仍为 used > committed 仍然为真(例如,当系统虚拟内存不足时),则内存分配可能会失败。 下面是一张显示内存池示例的图片:

    +----------------------------------------------+
    +////////////////           |                  +
    +////////////////           |                  +
    +----------------------------------------------+
    
    |--------|
       init
    |---------------|
           used
    |---------------------------|
              committed
    |----------------------------------------------|
    
  • 非堆内存(~Perm)

    另外,JVM还有堆以外的内存,简称非堆内存。它在 JVM 启动时创建并存储每个 class 结构,例如运行时常量池、字段和方法数据、方法和构造函数的代码,以及内部字符串。