0

200 スレッド (Jruby 1.7.0.preview1) を開始する jruby アプリケーションがあります。各スレッドは xml ドキュメントを解析し、複雑なデータをいくつかの mongodb コレクションに保存しました。Java Mongo Driver (バージョン 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 とメモリ リークに関する既知の問題はありますか?

誰でもこの問題を解決できますか?

Thxクリス

4

1 に答える 1

0

私は Eclipse のメモリ アナライザー ツールを使用して、この 1 週間で jruby on rails アプリの 3 つのメモリ リークを追跡しました。強くお勧めします。いずれの場合も、jruby 自体のメモリ リークではありませんでしたが、そのうちの 2 つは Mongoid にあり、1 つは自分のアプリにありました。ただし、jruby は MRI よりもメモリ リークの影響を受けやすいことに気付きました。

MAT を使用して jruby のリークを診断する方法については、こちらのブログ記事もご覧ください。

于 2012-10-10T15:05:55.860 に答える