1

5kb の .docx ファイルが Docx4j-2.8.1 に読み込まれ、PDF に変換されます。単体テストではこれは機能しますが、Tomcat 7 (実際には TomEE-1.6.0-SNAPSHOT) にデプロイされると、PDF 変換を実行するときに Permgen space エラーが発生します。

サンプルコード:

wordMLPackage = WordprocessingMLPackage.load(inputStream);
final PdfConversion pdfConvertor = new Conversion(wordMLPackage);
pdfConvertor.output(stream, null);
return stream.toByteArray();

inputStream は、.docx ファイルの byte[] から作成されました。docx ファイル自体は、Times New Roman のテキストといくつかの箇条書き (サンプル用) のみの単一ページです。

スタック トレースは次のとおりです (上部のログにヒープ サイズを追加しました)。

https://gist.github.com/jmkgreen/5046890

このマシンには 6GB の RAM があり、Tomcat には次のセットがあります。

set JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms1536m -Xmx2048M -XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=1024m -XX:MaxPermSize=4096m -XX:+DisableExplicitGC -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled"

このエラーが表示されるとは思っていませんでした。アドバイスをいただければ幸いです。

編集: PDF コンバーターを呼び出す直前に、Perm Gen の MemoryPoolMXBean から getUsage().getMax() を追加しました: 82MB。

また、JAVA_OPTS の tomcat catalina.bat ファイルのエントリを次のように減らしました。

set JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -XX:MaxPermSize=4096m -XX:+DisableExplicitGC -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled"

編集 2: docx4j から XDocReport に切り替えると、クラッシュが解決します。残念ながら、特に正確なレンダリングも提供しません...

4

1 に答える 1

0

JAVA_OPTS が正しく読み取られていない可能性がありますか? 以下で十分です。

set JAVA_OPTS=-XX:PermSize=256m -XX:MaxPermSize=256m
于 2013-02-28T00:12:27.727 に答える