我有一个jruby应用程序,它启动200线程(Jruby 1.7.0.preview1)。每个线程解析一个xml文档并将复杂的数据保存在几个mongodb集合中。我正在使用Java Mongo Driver(版本2.7.3)将数据存储在mongodb中。 我的应用程序JVM选项如下:内存泄漏Jruby 1.7.0.preview1
-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的已知问题吗?
任何人都可以帮我解决这个问题吗?
THX 克里斯