- 締切済み
JSPコンパイル時にメモリ使用量が急上昇します
サーバのPFメモリ使用量が急上昇し困っています。 <logic:iterate>タグを使用して1000行くらいのテーブルを作成する検索ページなのですが、 数回の検索ではなんともないのですが、 何度か検索を繰り返すと、サーバのPFメモリ使用量が急激に上昇します。 tomcatを再起動しないとサーバは正常に作動してくれませんでした。 JSPに表示させずに検索を行ってみると、何度検索しても問題ありませんでした。 どのような原因でこのようなことが生じるのかわかりません。 すいませんがよろしくお願いします。 Tomcat 4.0.1 struts 1.1 windows 2000 server
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- neuron-x
- ベストアンサー率52% (139/266)
数回の検索では問題なく、複数回の検索でメモリ使用量が増えると言うことは、JSPコンパイル時が原因ではありません。JSPがコンパイルされるのは、最初に表示する時の1回だけです。 考えられる一番の可能性として、メモリリークか、大量データをメモリに格納しつづけている事が考えられます。 > 1000行くらいのテーブルを作成する検索ページ ・これは、DB検索をして、1000行分のデータをJSPで表示しているということでしょうか? ・DBの検索は、JSPではなく、Actionクラス以降のビジネスロジック層で行っているのでしょうか? ・DBの検索は、10000件あった場合、カーソルなどを使用して、1000件分だけを取得しているのでしょうか?それとも、10000件全部メモリ上に読み込み、ロジックで1000件取得、または、JSPのiterateのoffset, lengthで1000件を表示させているのでしょうか? > JSPに表示させずに検索を行ってみると… ・JSPに表示させずに検索とは、具体的にどうやって検索したのですか?JSPのiterateタグをコメントアウトしただけですか? ・それとも、JUnitなどを使って、ビジネスロジックだけを呼び出したということでしょうか? 補足要求ばかりで申し訳ないのですが、現状ではこの程度の回答しかできません。
補足
neuron-xさん、ありがとうございます! とても参考になります。 > これは、DB検索をして、1000行分のデータをJSPで表示しているということでしょうか? ・その通りです。 検索結果を格納したbeanをArrayListオブジェクトに格納し、JSPで<logic:iterate>タグを使用し表示しています。 > DBの検索は、JSPではなく、Actionクラス以降のビジネスロジック層で行っているのでしょうか? ・これもその通りです。 > DBの検索は、10000件あった場合、カーソルなどを使用して、1000件分だけを取得しているのでしょうか?それとも、10000件全部メモリ上に読み込み、ロジックで1000件取得、または、JSPのiterateのoffset, lengthで1000件を表示させているのでしょうか? ・10000件あった場合は10000件表示されます。 現状では、検索結果が最大2000件位だと思いますので特に制限は設けない方針です。 300件くらいの検索からこの現象が起きることから、やはりコードに問題がありそうでしょうか? > JSPに表示させずに検索とは、具体的にどうやって検索したのですか?JSPのiterateタグをコメントアウトしただけですか? それとも、JUnitなどを使って、ビジネスロジックだけを呼び出したということでしょうか? ・検索条件入力画面→Actionクラス→DB検索クラス(ArrayListにbeanを格納)→結果表示画面 という感じの処理なのですが、 結果表示画面のiterateタグを削除しただけです。 この状態では問題なく作動します。 まだまだ説明不足なところがあると思いますので、 また補足要求の方があればよろしくお願いします。