2011-09-09 7 views
1

私はTomcat 6サーバーに配備されたGrailsアプリケーションを持っています。アプリケーションはしばらくの間(1日か2日)正常に動作しますが、停止するまでグラインドしてから最大値を超えるまで、徐々にメモリが徐々に増えていきます。コンテナを再起動すると、すべて正常です。私はgrails JavaMelodyプラグインとApplication Infoプラグインでこれを検証していますが、私は何を探しているのか判断するのに助けが必要です。Tomcat 6 Webアプリケーション時間をかけてメモリを食べる

アプリケーションリークのように聞こえますが、私の知る限り、アンマネージドリソースへのアクセスはありません。また、Hibernateキャッシュがチェックされているようです。私がガベージコレクタを実行した場合、まともなメモリのチャンクが返ってくるようですが、これをどのように持続可能に行うかわかりません。

だから:

  • は、どのように私は、問題がどこにあるかを把握するには、これらの(または他の)監視ツールを使用することができますか?
  • 私に助けになる助言はありますか?

ありがとうございます。

EDIT

私はGrailsの1.3.7を使用していると私はクォーツプラグインを使用しています。

+0

Quartzプラグインを使用していますか?また、Grailsのどのバージョンを使用していますか? –

+0

@Joshua Moore - 私の編集を参照してください。ありがとう。 – skaz

+0

私は同じ問題があります。 Grails 1.3.6をQuartzで使用しています(実際の問​​題はわかりませんが)。私の問題はそれほど差し迫っていないので、私は数週間おきに再起動する必要があります。 – wwwclaes

答えて

2

Oracle JDKのVisualVMアプリケーションを使用して、稼働中(すでにOracle JVMを使用している場合)にTomcatインスタンスに接続して、何が起きているかを調べることができます。メモリプロファイラはあなたにかなりのことを伝え、正しい方向に向けることができます。おそらく、成長するオブジェクトや、ますます多く割り当てられるオブジェクトのタイプのいずれかを探します。

無料のVisualVMアプリケーション以上のものが必要な場合は、市販のプロファイラーが役立つ場合があります。

+0

これはリモートでも使用できますか? – skaz

+0

おそらく、そう簡単ではありません。 JMXポートを公開するようにTomcat JVMを設定する必要があります。 –

+0

データベース接続プールと関係がありますか?私はそのアプリケーションをローカルに走らせましたが、同じ時間枠で同じ問題を抱えていませんでした。私はそれが1つの接続を開いているだけかもしれないと思う。プロダクションアプリケーションには多くの 'TP-Processor'スレッドがありますが、私がテストしたローカルのスレッドはカップルしかありません。これは関連していますか?ありがとう。 – skaz

1

Quartzの使用状況によっては、永続性とスレッドローカルのa know memory leak with the Quartz pluginに直接関係する場合があります。これがあなたの状況に当てはまるかどうかを再度確認して確認することができます。

+0

Quartzに関するこの洞察をありがとうございます。それは問題ではありませんでしたが、将来役立つかもしれません。 – skaz

関連する問題