gpt4 book ai didi

java - Docx4j Permgen Space with 2G 和转换为 PDF 时的小文档

转载 作者:行者123 更新时间:2023-11-28 22:31:39 25 4
gpt4 key购买 nike

我们有一个 5kb 的 .docx 文件被读入 Docx4j-2.8.1,然后转换为 PDF。在单元测试中这是可行的,但一旦部署到 Tomcat 7(实际上是 TomEE-1.6.0-SNAPSHOT)中,我们在执行 PDF 转换时会遇到 Permgen 空间错误。

示例代码:

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

native 有6GB内存,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 转换器之前从 MemoryPoolMXBean 中为 Perm Gen 添加了 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 解决了崩溃问题。遗憾的是两者都没有提供特别准确的渲染...

最佳答案

也许您的 JAVA_OPTS 没有被正确读取?以下应该足够了:

set JAVA_OPTS=-XX:PermSize=256m -XX:MaxPermSize=256m

关于java - Docx4j Permgen Space with 2G 和转换为 PDF 时的小文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15109523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com