Java直接缓冲区内存错误的一些常见原因是什么?

Java直接缓冲区内存错误的一些常见原因是什么?,java,ruby-on-rails,torquebox,Java,Ruby On Rails,Torquebox,我在Torquebox上运行了多种Rails应用程序。有时,Torquebox会在短时间内(可能2-5分钟)停止响应请求,日志中将充满以下错误消息: java.lang.OutOfMemoryError: Direct buffer memory 错误发生在不可预测的时间(通常是几天之间)。负载测试不会重现该问题,而且该问题在峰值负载期间也不会发生。而且,与我在过去看到的许多其他类型的内存错误不同,服务器实际上恢复并再次开始正常响应,而无需任何重启或干预 是否有任何常见的编码错误、错误配置或其

我在Torquebox上运行了多种Rails应用程序。有时,Torquebox会在短时间内(可能2-5分钟)停止响应请求,日志中将充满以下错误消息:

java.lang.OutOfMemoryError: Direct buffer memory
错误发生在不可预测的时间(通常是几天之间)。负载测试不会重现该问题,而且该问题在峰值负载期间也不会发生。而且,与我在过去看到的许多其他类型的内存错误不同,服务器实际上恢复并再次开始正常响应,而无需任何重启或干预

是否有任何常见的编码错误、错误配置或其他潜在问题经常导致此错误?Google在各种库(例如Netty)中发现了许多低级Java/垃圾收集类型的问题,但我很想看看是否还有其他常见的地方可以查找。

指出,如果Java堆不经常需要垃圾收集,直接内存可能不会被清除(可能是在非高峰时段)


如果您有一个使用直接内存的常量函数,而不考虑负载,那么应用程序可能在较短的负载时间内调用垃圾收集的次数不够。使用GC模块可能会有所帮助().

本例中的问题最终是缺少足够的总可用内存。Java的内存占用可能会远大于堆分配。直接缓冲区内存只是堆之外的内存使用类型之一

我仍然不清楚为什么波动会在不可预测的时间发生,但确保系统上有足够的多余内存来处理某些波动对稳定性至关重要