繁体   English   中英

如何使用JMX监视在内存不足时重启JVM?

[英]How to restart JVM when it runs out of memory by using JMX monitoring?

我想为JVM创建一个nagios监视程序,查看JVM内存不足并重新启动它。

目前我能够设置JVM是允许JMX但我不知道如何检测OutOfMemory条件并重新启动它。

 /check_jmx -U service:jmx:rmi:///jndi/rmi://127.0.0.1:1100/jmxrmi -O "java.lang:type=Memory" -A "HeapMemoryUsage" -K used -I HeapMemoryUsage -J used -vvvv
 JMX OK HeapMemoryUsage.used=957414288{committed=2415984640;init=2147483648;max=2863333376;used=957414288}

https://github.com/tcurdt/nagios-check-jmx

如果您使用的是Java 1.4.2或更高版本,则此选项允许您在发生第一个OutOfMemeory异常时执行用户定义的命令: -XX:OnOutOfMemoryError =“<cmd args>; <cmd args>”

这应该给你一些不错的选择。 例如,您可以启动被动检查nagios告诉它服务器正在重新启动,然后启动shell脚本以停止/启动错误的JVM。

我不认为您将能够使用JMX检测到内存不足的情况。 如果JVM确实处于生命的终点,那么当您尝试连接时,JMX连接很可能会自行抛出OOM异常。

我们检测内存条件而不是OOM。 当我们的系统的自由存储器在一定时间内低于某个水印时,我们会发出警报。 我们还有运行转储每服务度量标准文件的线程。 由于线程已经分配,​​因此可以在JVM用完后可靠地转储系统内存信息。

我们记录:

// free memory
Runtime.getRuntime().freeMemory()
// current heap usage
Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM