【发布时间】: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