2009-08-31 30 views
0

まず、私は本当にプレーンなJSPページではありません。それには、データベースアクセスとluceneベースの検索エンジンと約400ページのスタンドアロンJSPページがあります。プレーンなJSPサイトでメモリリークが発生する可能性があります

私たちがアクセスしていないプロダクションサーバーの管理者は、サイトがメモリを使い過ぎていると言います(200MB以上のメガ)。メモリリークが発生している可能性があります。それを再起動します。

私はJSPのエキスパートではありませんが、実際にはメモリリークではなく、データベースページとルーネン検索はこの問題とは関係ありません。私は各JSPページがJavaクラスにコンパイルされて実行され、後でアクセスできるようにメモリに保持されていることを理解しています。

実際の質問は:このように高められた(私はそう思っています)スタンドアロンJSPページの数は、メモリ使用量が200Mまで増加する原因になりますか?

はいの場合、どのようにメモリ使用量を減らしますか?インクルードにSSIを使用すると(その目的のJSPページの使用を避ける)オプションになる可能性がありますか?事前

答えて

1

JSPあたりの半分のメガバイトは、私が通常期待しているものではありません。明らかに、JSPで好きなコードを書くことができるので、コンパイルされたJSPは膨大なものになり、大量のメモリを割り当てることができますが、これが従来のJSPであると仮定すると、せん断ではなく実行時の動作を疑うでしょうJSPの数

多くのセッションデータがある可能性があります。ユーザーがページ間を移動するにつれて、セッションサイズが増加する可能性があります。データベースから取り出されたデータがセッション内に一時的に置かれ、別のページで使用できるようになるのはよくあることです。それが整理されなければ、素早く多くのメモリを消費することができます。

+0

だから、各JSPの半分メガはいつものものではありません。約1.5Mを消費するいくつかのJSPがあり、テキスト(約15k)のみで構成され、セッション・ゴミがまったく置かれていない文が含まれています。それは600k未満のJSPページの重みがないため、奇妙です。 – azkotoki

+0

私が示唆できるのは、そのようなJSPを1つ取り、何が起こっているかを見つけるまで徐々に断片を取り除くことです。おそらく、いくつかの大きなデータ構造が作成されていますか?おそらくJDBCの結果セットが十分に迅速に閉じられていないと考えてください。 – djna

1

メモリを消費しますかを知るための唯一の方法で

おかげでプロファイラを使用することです。私たちがやっていることは、次のようにして、ヒープ・ダンプを取るし、それを分析することである。

  • は、ヒープ・ダンプを取得するためにjmapユーティリティ(JDKに付属している)を使用します。それはrootとして実行する必要があります!
  • はロケールマシン
  • ダウンロードにファイルをダウンロードしてインストールしEclipse Memory Analyser - 個人的にそれのように他の人(のようなjhat)が、私はあります。
  • ファイルを開く
  • ほとんどのメモリを使用するクラスを確認します。

それにもかかわらず、サーバーが起動する前にJSPを事前コンパイルすることは常に有効です。

0

メモリの使用場所を決定する必要があります。アプリケーションがメモリをどのように使用しているか(たとえば、Davidが述べたようにセッションデータなど)によって、200MBが多すぎるという記述は本当に役に立たない。実際にメモリリークが発生しているかどうか、アプリケーションが200MBで安定しているかどうかを理解するためには、アプリケーションのライフサイクルのさまざまな時点からヒープダンプと冗長なGCログを分析する必要があります。あなたはおそらくそうするでしょう)。

関連する問題