我有一个启动 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)。我不知道我是否可以减少这种对象类型的数量。
Jruby 中的 LinkedHashMaps 和 Memory Leaks 是否存在已知问题?
谁能帮我解决这个问题?
谢谢克里斯