我在Torquebox上运行了各种Rails应用程序。偶尔,Torquebox会在很短的时间内(可能2-5分钟)停止响应请求,日志中会填满以下错误消息:
java.lang.OutOfMemoryError: Direct buffer memory错误发生在不可预测的时间(通常是两天之间)。负载测试不会重现该问题,而且该问题也不会在峰值负载期间发生。而且,与我过去看到的许多其他类型的内存错误不同,服务器实际上会恢复并重新开始正常响应,而无需任何类型的重启或干预。
是否存在常见的编码错误、配置错误或其他经常导致此错误的潜在问题?Google在各种库(例如Netty)中发现了许多低级Java/垃圾收集类型问题,但我很感兴趣地想看看是否还有其他常见的地方可以查看。
发布于 2013-09-07 04:47:50
JNA/ByteBuffer not getting freed and causing C heap to run out of memory指出,如果Java不经常需要垃圾收集(在您的例子中,可能是在非高峰时间),那么直接内存可能不会被清除。
如果您有一个使用直接内存的常量函数,而不管加载情况如何,那么在较轻的加载时间内,应用程序可能不会调用足够的垃圾收集。使用GC模块可能会有所帮助(http://ruby-doc.org/core-2.0/GC.html)。
发布于 2014-01-31 00:31:28
这种情况下的问题最终是缺乏足够的总可用内存。Java的内存占用最终可能比堆分配要大得多。直接缓冲内存只是堆之外的内存使用类型之一。
我仍然不清楚为什么波动发生在不可预测的时间,但确保系统上有足够的多余内存来处理一些波动对稳定性至关重要。
https://stackoverflow.com/questions/18664177
复制相似问题