在我们的prod服务器中,伊甸园空间正在迅速被填满,强制进行少量收集regularly.The下图显示了日志文件的GC分析。
http://imagebin.org/166489
下面列出了VM选项。
<jvm-options>-XX:SurvivorRatio=6</jvm-options>
<jvm-options>-XX:NewSize=1344m</jvm-options>
<jvm-options>-XX:MaxNewSize=1344m</jvm-options>
<jvm-options>-Xms3072m</jvm-options>
<jvm-options>-Xmx3072m</jvm-options>
<jvm-options>-XX:MaxPermSize=400m</jvm-options>
<jvm-options>-XX:NewRatio=2</jvm-options>这是由于内存泄漏造成的吗?
任何帮助都将不胜感激。
发布于 2011-08-05 15:34:35
一个繁忙的应用程序每秒可能会产生大约1/2 GB的垃圾。在你的eden空间填满之前,这会给你2.5秒的垃圾时间。如果您创建的代码少于这个值,则说明您的应用程序不是很忙,或者代码效率较高。
如果您想减少产生的垃圾数量,我建议您使用VisualVM或YourKit之类的工具来分析应用程序。另一种选择是增加伊甸园空间。例如,我会从8G或16 of或1/3的内存开始。并在您的应用程序调优时减少它。
发布于 2011-08-05 16:28:32
这不是内存泄漏,而是您创建了许多临时对象。我遇到了一个问题,我们用3d点做了大量的计算,一个简单的实现为每个临时结果创建了一个新对象(这在C++中可能工作得很好),但它在垃圾中每秒生成千兆字节。在重写之后,为了尽可能多地重用对象,它的速度降到了20兆每秒。
你能做什么?如果是你的代码,试着用预期的目标大小预分配数组,列表和字符串缓冲区;避免字符串连接;重用ovject。如果你有很多框架代码和库,你只能试着调优eden空间;检查缩小它是否对你的情况有帮助(你会得到更多更快完成的GC事件,你需要衡量它是否有帮助)。
https://stackoverflow.com/questions/6952437
复制相似问题