Java 进程报告的 RES 内存怎么会高于 VIRT 内存?

Java 进程报告的 RES 内存怎么会高于 VIRT 内存?

我一直在使用 TOP 监控 Java 进程 (Oracle Weblogic),并观察到有时会发生以下情况:

  • 在一个小时左右的时间内,RES 将从通常的稳定水平 2,097,152 KB 增加到近 10GB,然后下降到零,然后恢复到 2,097,152 KB
  • 在此期间,VIRT 内存始终保持在 6,904,832KB
  • %MEM 随着 RES 的增加而增加,当 RES 下降时继续增加(系统有 32GB RAM)

我读过很多关于 RES、VIRT 和 %MEM 的解释,包括男士上衣,这并不适合他们中的任何一个。具体来说,我认为 RES 和 %MEM 必须完全相关,并且 RES 永远不会高于 VIRT。

谁能解释一下发生了什么事吗?

我在下面添加了一张图片,显示了随时间变化的行为。

可能相关的是,这是负载平衡系统的一个节点,而另一个节点就像什么也没发生一样继续进行。我在不同的日子里在任一节点上都看到过这种情况六次。它确实会导致最终用户响应时间在 RES 下降时出现短暂的小峰值。两个节点非常接近相同。管理员已在 Java 进程上设置了各种内存标志。开启Verbose GC,以下时间段内没有发生full GC。

随着时间的推移内存使用异常。

相关内容