2

我们有一个 Nagios 检查来检查一些 Tomcat 实例上的堆内存状态。它用于从 VM 获取指标的命令如下:

java -jar /usr/java/cmdline-jmxclient-0.10.3.jar - localhost:17757 java.lang:type=Memory HeapMemoryUsage

产生如下输出:

committed: 132579328
init: 134217728
max: 401014784
used: 18831512

如果反对used值大于反对值的 90%,则会启动警报max。这对我来说似乎是有缺陷的,主要是因为价值max可以下降和上升:)

我们应该使用什么信息来正确监控堆空间的消耗?

我应该max与 的值进行比较Xmx吗?

我可以使用以下命令检索 Xmx 的值:

java -jar /usr/java/cmdline-jmxclient-0.10.3.jar - localhost:17757 java.lang:type=Runtime InputArguments

有没有更好的办法?

4

1 回答 1

1

根据我的观察,“最大值”是波动的。监视一个示例 Java 进程,使用的堆会如您所料那样变化,但是当使用的堆接近这些限制时,提交的值和最大值也会动态地调整大小(我相信比率是可配置的)。

就我而言,Xmx 标志设置为 9 GiB,奇怪的是,提交的值和最大值偶尔会超过这个值(9.2 GiB)?

Java 倾向于积极使用可用的堆空间,因此偶尔达到 100% 的已用堆大小不会打扰我。相反,我会对最后 5、10 和 15 分钟等的平均值更感兴趣。如果使用的堆长时间保持在 90% 以上,您可能会遇到问题 - 检查您的 GC 开销将是一个很好的指标(和任何 OOME 显然)。

于 2011-10-18T16:04:20.703 回答