1

VisualVmを使用して、Tomcatで実行されているWebアプリケーションのプロファイルを作成しています。Tomcatはメモリ不足エラーでクラッシュし続けるので、アプリケーションで何が原因であるかを把握しようとしています。VisualVmからメモリプロファイラーを実行すると、メモリの大部分がString / Char []によって使用されているように見えますが、これらの文字列の上位レベルのコンテナーを理解できない限り、知識はほとんど役に立ちません。調査を行っているときにOQLを見つけrsizeof()たので、たとえばSELECT rsizeof(o) FROM instanceof my.package.class o、どのクラスが必要かわからないので、SELECT it.name, rsizeof(o) FROM instanceof Filter(Heap.classes(), "/my.package./(it.name)");代わりにそのようなものを実行できるようにしたいと思っていますが、それは機能しません。

では、OQLは何​​でしょうか?理想的には、トップ10程度に制限し、サイズで並べ替えたいと思います。

4

1 に答える 1

1

完全に理解したかどうかはわかりませんが...

OQLはJavaScriptベースの式言語を使用するため、次のステートメントを使用できます。java.util.regexパッケージ内にあるすべてのオブジェクトを(再帰的に)検索し、それらのサイズを合計すると、単一の数値が返されます。

sum(filter(heap.objects(), "/^java.util.regex./(classof(it).name)"), 'rsizeof(it)')

これには同じ時間がかかります。私は小さなヒープでのみテストしました。パッケージ^名の先頭にあることに注意してください。

于 2013-04-09T20:17:47.593 に答える