- PR -

Webアプリにおけるjava.lang.OutOfMemoryErrorの対応方法

1
投稿者投稿内容
ノヴァ
会議室デビュー日: 2006/03/31
投稿数: 14
投稿日時: 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 ]
KOX
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 142
投稿日時: 2006-04-03 14:19
レコード件数がどれだけあるのか分かりませんし、
それがどの程度負荷が大きい処理か分かりませんので、
はっきりしたことは言えませんが、
単純に128mでは足りないということはありませんか?
余裕で足りるはずというのであれば、
メモリリークしている可能性を考える必要があるかもしれません。
ノヴァ
会議室デビュー日: 2006/03/31
投稿数: 14
投稿日時: 2006-04-03 14:56
KOXさん、返信ありがとうございます。

POIを使用しているので、
シートをコピーして、DBから取得した値を「シート名」に書き込む
と言った作業でエラーとなります。
「シート名」の件数は141件に対し、107件くらいで落ちてるようです。

容量を128Mにした理由は、決め方がよくわからなかったので、128Mあれば大丈夫だろうといったくらいにしか考えていませんでした。
(たしかデフォルトの初期容量は1Mと書いてあったので・・・)

しかし、環境変数に追加しようがしまいが、「107件」くらいで落ちてしまいます。
ということは、JVMのヒープ領域を拡張するオプションが認識されていないのでしょうか?
かしん
常連さん
会議室デビュー日: 2004/08/27
投稿数: 25
お住まい・勤務地: 窓際
投稿日時: 2006-04-03 15:15
Xmxオプションが認識されているか、されていないかは調査することが出来ますよ。
まずは、オプションを設定した時と、設定しない時のMaxMemory値を確認してみましょう。
一番手っ取り早いのはRuntime#maxMemoryの値を調べることです。
Runtime#totalMemoryや、Runtime#freeMemoryも調べてみてはいかがでしょうか。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-04-03 16:30
もしかするとデフォルトの"最大容量"は128mbなのかもしれませんね。
パラメータを追加する、しないといったテストの他に、より容量を増やした場合、減らした場合に件数が変化するかも確認してはいかがでしょう。
1

スキルアップ/キャリアアップ(JOB@IT)