- - PR -
Webアプリにおけるjava.lang.OutOfMemoryErrorの対応方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-04-03 13:30
Java初心者なので、知っている方がいましたら教えてください。
下記の環境で、Jakarta POIを使用して、Excel出力を行おうと考えています。 ============================================================ OS : Windows XP Professional SP1 AP SERVER : Tomcat 5.0.28 FRAMEWORK : Struts 1.2.7 DB : Oracle9i IDE : Eclipse 3.0.2 ============================================================ しかし、Excelに出力するレコード件数が多いためか、OutOfMemoryErrorが発生してしまいます。 「参照元記事」リンクにあるページを参考に、JVMのヒープサイズを大きくしようと、 環境変数:JAVA_OPTS -Xmx128m -Xms128m、 CATALINA_OPTS -Xmx128m -Xms128m を設定しましたが、うまく動作しません。 (何度やってもOutOfMemoryErrorがでてしまう) となると、上記の「環境変数の設定」以外にも何か必要なのでしょうか。 ご存知の方がいましたら、ぜひとも教えてください。 [ メッセージ編集済み 編集者: ノヴァ 編集日時 2006-04-03 13:55 ] |
|
投稿日時: 2006-04-03 14:19
レコード件数がどれだけあるのか分かりませんし、
それがどの程度負荷が大きい処理か分かりませんので、 はっきりしたことは言えませんが、 単純に128mでは足りないということはありませんか? 余裕で足りるはずというのであれば、 メモリリークしている可能性を考える必要があるかもしれません。 |
|
投稿日時: 2006-04-03 14:56
KOXさん、返信ありがとうございます。
POIを使用しているので、 シートをコピーして、DBから取得した値を「シート名」に書き込む と言った作業でエラーとなります。 「シート名」の件数は141件に対し、107件くらいで落ちてるようです。 容量を128Mにした理由は、決め方がよくわからなかったので、128Mあれば大丈夫だろうといったくらいにしか考えていませんでした。 (たしかデフォルトの初期容量は1Mと書いてあったので・・・) しかし、環境変数に追加しようがしまいが、「107件」くらいで落ちてしまいます。 ということは、JVMのヒープ領域を拡張するオプションが認識されていないのでしょうか? |
|
投稿日時: 2006-04-03 15:15
Xmxオプションが認識されているか、されていないかは調査することが出来ますよ。
まずは、オプションを設定した時と、設定しない時のMaxMemory値を確認してみましょう。 一番手っ取り早いのはRuntime#maxMemoryの値を調べることです。 Runtime#totalMemoryや、Runtime#freeMemoryも調べてみてはいかがでしょうか。 |
|
投稿日時: 2006-04-03 16:30
もしかするとデフォルトの"最大容量"は128mbなのかもしれませんね。
パラメータを追加する、しないといったテストの他に、より容量を増やした場合、減らした場合に件数が変化するかも確認してはいかがでしょう。 |
1