Tomcat (Warble) 内で実行されている JRuby on Rails アプリケーションがあります。Java ブリッジを使用して Progress(OpenEdge) アプリケーション サーバーに接続します... メモリを監視すると、メモリが増え続けます。
- トムキャット 7.0
- JRuby 1.6.7.2 (Ruby-1.9.2-p312)
- JVM 1.7.0.25
- レール 3.2.7
- jruby ラック 1.1.7
- ウグイス1.3.6
ここで問題の根底に到達するための最良の方法は何ですか? クリーンアップされていないJRubyオブジェクトか、Javaブリッジまたはガベージコレクターの何かがその仕事をしていない可能性があると思います...
プロセスを30分実行しても、メモリは減りません...
- どのオブジェクトが生きているかを知る方法はありますか?
- 誰がすべてのメモリを使用しているかについてより多くの情報を得ることができる、使いやすい無料のツールはありますか?
ところで、Tomcat サーバーがより多くのメモリを使用するように構成済みですが、それは単にヒープ スペース エラーを遅らせているだけです...
編集:私が実際に見ているのは、Tomcatが最大使用できるすべてのメモリ(最大メモリプール)を使用していることです。そしてそれは決してそれを解放しません。多分それはただの通常の動作です...たとえば、最大を256MBに設定しましたが、タスクマネージャーでは、メモリは約256MBのままです。
編集:
ヒープ ダンプを作成し、Eclipse に Eclipse メモリ アナライザーで分析させると、このようなレポートが得られます。ツールはおそらくJRubyのストーリー全体を期待していないので、それは正常だと思います...
問題の容疑者 1
「org.apache.catalina.loader.WebappClassLoader @ 0x700ec6988」によってロードされた「org.jruby.RubyClass」の 6.458 インスタンスは、56.969.616 (31,78%) バイトを占有します。
キーワード org.apache.catalina.loader.WebappClassLoader @ 0x700ec6988 org.jruby.RubyClass
問題の容疑者 2
「org.apache.catalina.loader.WebappClassLoader @ 0x700ec6988」によってロードされた「org.jruby.internal.runtime.methods.DefaultMethod」の 10.597 インスタンスは、22.182.112 (12,37%) バイトを占有します。
キーワード org.jruby.internal.runtime.methods.DefaultMethod org.apache.catalina.loader.WebappClassLoader @ 0x700ec6988
問題の容疑者 3
「org.apache.catalina.loader.WebappClassLoader @ 0x700ec6988」によってロードされた「org.jruby.RubyModule」の 3.144 インスタンスは、21.226.816 (11,84%) バイトを占有します。
キーワード org.apache.catalina.loader.WebappClassLoader @ 0x700ec6988 org.jruby.RubyModule
問題の容疑者 4
「org.apache.catalina.loader.WebappClassLoader @ 0x700ec6988」によってロードされた「org.jruby.MetaClass」の 8.888 インスタンスは、18.563.784 (10,35%) バイトを占有します。
キーワード org.jruby.MetaClass org.apache.catalina.loader.WebappClassLoader @ 0x700ec6988