2012-10-10 57 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中的泄漏。