检测内存不足错误
我想为我的系统提供一种检测内存不足异常是否发生的方法。本练习的目的是通过 JMX 公开此标志并采取相应的操作(例如,通过在监视系统上配置相关警报),否则这些错误会持续数天而不被注意到。
对此的朴素方法是为每个线程设置一个未捕获的异常处理程序,并检查引发的异常是否是实例并设置相关标志。但是,由于以下原因,此方法不切实际:OutOfMemoryError
- 异常可能发生在任何地方,包括第三方库。我无能为力,以防止他们抓住并为自己保留它。
Throwable
- 库可以生成自己的线程,我无法为这些线程强制执行未捕获的异常处理程序。
我看到的一种可能的情况是字节码操作(例如,在 )上附加某种方面,但是我不确定这是否是正确的方法,或者这通常是否可行。OutOfMemoryError
我们已经启用了,但我不认为这是这个问题的解决方案,因为它是为其他东西设计的 - 并且当这种情况发生时,它不提供Java回调。-XX:+HeapDumpOnOutOfMemoryError
有人这样做过吗?你会如何解决它或建议解决它?欢迎任何想法。