【问题标题】:Memory Leaks in Jruby 1.7.0.preview1Jruby 1.7.0.preview1 中的内存泄漏
【发布时间】:2012-10-10 12:49:03
【问题描述】:

我有一个启动 200 个线程的 jruby 应用程序(Jruby 1.7.0.preview1)。每个线程解析一个 xml 文档并将复杂的数据保存在几个 mongodb 集合中。我正在使用 Java Mongo 驱动程序(2.7.3 版)将数据存储在 mongodb 中。 我的应用程序的 JVM 选项如下:

-J-Djruby.thread.pooling=true -J-Xmn512m -J-Xms4096m -J-Xmx4096m -J-XX:+UseConcMarkSweepGC -J-XX:CMSInitiatingOccupancyFraction=45 -J-XX:ParallelGCThreads=1 -J-XX:+DisableExplicitGC -J-XX:+PrintGCDetails -J-XX:+PrintGCTimeStamps -J-Xloggc:/LOGPATH/gc.log -J-Dsun.rmi.dgc.client.gcInterval=60000 -J-Dsun.rmi.dgc.server.gcInterval=60000

因此,每次线程工作并在特定集合中保存数据时,我的堆大小都会非常快地达到 4GB 的限制。我使用 jmap 命令进行了测试,发现创建了许多 java.util.LinkedHashMap 对象(大约 1.300.000)。 不知道能不能减少这种objecttype的数量。

是否存在与 Jruby 中的 LinkedHashMaps 和内存泄漏有关的已知问题?

谁能帮我解决这个问题?

谢谢 克里斯

【问题讨论】:

    标签: multithreading mongodb memory-leaks jruby


    【解决方案1】:

    过去一周,我使用 Eclipse 的 Memory Analyzer Tool 成功追踪了我的 jruby on rails 应用程序中的 3 个内存泄漏。我强烈推荐它。在任何情况下都不是 jruby 本身的内存泄漏,而是其中 2 个在 Mongoid 中,一次在我自己的应用程序中。然而,我注意到,jruby 比 MRI 对内存泄漏更敏感。

    还可以查看blog post,了解如何使用 MAT 诊断 jruby 中的泄漏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-06
      • 1970-01-01
      • 2015-12-01
      • 2010-12-20
      • 2020-05-26
      • 2012-08-20
      相关资源
      最近更新 更多