首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Direct buffer memory错误的常见原因是什么?

Java Direct buffer memory错误的常见原因是什么?
EN

Stack Overflow用户
提问于 2013-09-07 02:21:41
回答 2查看 2.8K关注 0票数 3

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

代码语言:javascript
复制
java.lang.OutOfMemoryError: Direct buffer memory

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

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

EN

回答 2

Stack Overflow用户

发布于 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)。

票数 2
EN

Stack Overflow用户

发布于 2014-01-31 00:31:28

这种情况下的问题最终是缺乏足够的总可用内存。Java的内存占用最终可能比堆分配要大得多。直接缓冲内存只是堆之外的内存使用类型之一。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18664177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档