xlsx形式の最大処理の行数

1,501 views
Skip to first unread message

kgo...@gmail.com

unread,
Apr 18, 2013, 10:53:47 AM4/18/13
to exc...@googlegroups.com
約17万行✕各行 5項目のデータを .xlsx 形式でレポート処理を試みています。
しかし、処理が終わらず途中でjava.lang.OutOfMemoryError: Java heap space となり xlsx形式に出力することが出来ません。

試しにデータを6万行、各行5項目に減らし .xls形式 / .xlsx形式 両方でテストデータを同一にし
それぞれ処理をしたところ、 .xls形式は5秒ほどで正常に出力を終えましたが、
.xlsx形式ではjava.lang.OutOfMemoryError: Java heap space が発生します。

.xlsx形式では処理する行数の最大数が存在するのでしょうか?

❏環境
Windows 7 Core i7 2.8GHz
メモリ: 4GB

Java1.6
excella-core-1.7.jar
excella-reports-1.5.jar

kgo...@gmail.com

unread,
Apr 18, 2013, 11:28:58 AM4/18/13
to exc...@googlegroups.com, kgo...@gmail.com
補足:

  エラー時の結果です。

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at org.apache.xmlbeans.impl.store.Saver$TextSaver.resize(Saver.java:1592)
at org.apache.xmlbeans.impl.store.Saver$TextSaver.preEmit(Saver.java:1223)
at org.apache.xmlbeans.impl.store.Saver$TextSaver.emit(Saver.java:1144)
at org.apache.xmlbeans.impl.store.Saver$TextSaver.emitElement(Saver.java:926)
at org.apache.xmlbeans.impl.store.Saver.processElement(Saver.java:456)
at org.apache.xmlbeans.impl.store.Saver.process(Saver.java:307)
at org.apache.xmlbeans.impl.store.Saver$TextSaver.saveToString(Saver.java:1727)
at org.apache.xmlbeans.impl.store.Cursor._xmlText(Cursor.java:546)
at org.apache.xmlbeans.impl.store.Cursor.xmlText(Cursor.java:2436)
at org.apache.xmlbeans.impl.values.XmlObjectBase.xmlText(XmlObjectBase.java:1455)
at org.apache.poi.xssf.model.SharedStringsTable.getKey(SharedStringsTable.java:130)
at org.apache.poi.xssf.model.SharedStringsTable.addEntry(SharedStringsTable.java:176)
at org.apache.poi.xssf.usermodel.XSSFCell.setCellValue(XSSFCell.java:345)
at org.apache.poi.xssf.usermodel.XSSFCell.setCellValue(XSSFCell.java:315)
at org.bbreak.excella.core.util.PoiUtil.setCellValue(PoiUtil.java:920)
at org.bbreak.excella.reports.tag.RowRepeatParamParser.parse(RowRepeatParamParser.java:330)
at org.bbreak.excella.reports.tag.RowRepeatParamParser.parse(RowRepeatParamParser.java:57)
at org.bbreak.excella.core.SheetParser.parseCell(SheetParser.java:134)
at org.bbreak.excella.core.SheetParser.parseSheet(SheetParser.java:104)
at org.bbreak.excella.core.BookController.parseSheet(BookController.java:251)
at org.bbreak.excella.reports.processor.ReportProcessor.processBook(ReportProcessor.java:182)
at org.bbreak.excella.reports.processor.ReportProcessor.process(ReportProcessor.java:110)
at excella2.PivotGraphReporter2.main(PivotGraphReporter2.java:115)


2013年4月18日木曜日 23時53分47秒 UTC+9 kgo...@gmail.com:

横井

unread,
Apr 18, 2013, 9:13:41 PM4/18/13
to exc...@googlegroups.com, kgo...@gmail.com
横井です。

エラーを見る限り、ヒープサイズが足りないのだと思いますので、
-Xmxオプションでサイズを増やしてみるとどうでしょうか。

xlsとxlsxでは内部的なデータの持ち方が大きく異なりますので(xlsxはxml)
xlsxの方がより多くのメモリを使用するのだと思います。


2013年4月19日金曜日 0時28分58秒 UTC+9 kgo...@gmail.com:

kgo...@gmail.com

unread,
Apr 23, 2013, 12:21:46 AM4/23/13
to exc...@googlegroups.com, kgo...@gmail.com
横井様

お世話になっております。GOともうします。

ヒープサイズが足りないとのご指摘ありがとうございます。
当方の環境にて -xmxオプションで256MBから700MBでサイズを増やしてみましたが、改善されませんでした。(これ以上-xmxオプションで増やすとEclipseが起動しません。)

そこで、動作マシンを64bitの以下のものにしたところ若干の改善が見られました。

❏テストマシン
Windows7 64bit版 Core2Duo
メモリ 2GB
Java1.6
excella-core-1.7.jar
excella-reports-1.5.jar
-xmx オプションで 1GBを指定

6万行5項目の .xlsx形式のテストデータが15分ほどで処理を完了出来ました。
しかし、本番データの17万行5項目のデータに差し替えて実行したところ同様にヒープサイズ不足で処理が途中で止まりました。

後日、もう一台テスト端末(win7 64bit Core i7/ メモリ4GB)を用意し、テストを実施する予定です。

今回のように大容量のデータを .xlsx形式で過去にテストされたことがある方はその際どの程度のマシンで実行されたかアドバイス頂けると助かります。
また、 .xlsx形式の大容量のデータをexcellaを使って処理する際に必要なマシンスペック等ご存知のかたいらっしゃいましたらご教示下さい。



2013年4月19日金曜日 10時13分41秒 UTC+9 横井:

横井

unread,
Apr 23, 2013, 1:22:33 AM4/23/13
to exc...@googlegroups.com, kgo...@gmail.com
GOさん

どうも。横井です。

-Xmxのオプションですが、eclipse自体の起動オプションではなく、
起動するプログラム側のオプションです。

具体的には[Run Configurations]-[Arguments]のVm argumentsです。
日本語化している場合は、[実行構成]-[引数]のVM引数ですね。

Eclipseから起動されるプログラムはEclipse自体とは別VMで起動するので、
プログラムの起動オプションとして設定する必要があります。

2013年4月23日火曜日 13時21分46秒 UTC+9 kgo...@gmail.com:
Reply all
Reply to author
Forward
0 new messages