2012-10-10 24 views
0

我有一个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 克里斯

回答

0

我已经使用Eclipse的Memory Analyzer Tool成功追查我的JRuby 3个内存泄漏on Rails应用程序在过去的一周。我强烈推荐它。在这些案例中,没有一个是jruby本身的内存泄漏,但其中两个是在Mongoid中,一次是在我自己的应用程序中。不过,我注意到,jruby比MRI更易发生内存泄漏。

也可以查看此blog post关于使用MAT来诊断jruby中的泄漏。