【发布时间】:2014-09-05 15:07:53
【问题描述】:
在 WebLogic 12.1.2 上使用 docx4j 生成数百页带有嵌入图像的 docx 文档文件时,性能比在同一虚拟机上运行的 WebLogic 12.1.3 上的相同操作慢约 5 倍相同的 JVM 配置——12.1.2 大约 20 分钟,而 12.1.3 大约 4 分钟。
运行 top 获取 CPU 和内存统计信息,运行 jstat -gc 获取垃圾收集统计信息。在生成文档时,CPU 在 12.1.2 上固定为 100%,而在 12.1.3 上固定为 15%。伊甸园堆使用量在 12.1.2 上快速增长,因此垃圾收集频繁,而在 12.1.3 上增长非常缓慢。在操作运行时运行 jstack 几次以查看线程堆栈。十分之九,在 12.1.2 堆栈显示 docx4j 正在调用 EclipseLink 的 JAXB 并且 JAXB 是类加载——大量的类加载需要大量的 CPU 时间(可能与:Do I have a JAXB classloader leak 但不要' t 可以直接控制 docx4j)。
问题已被隔离到包含 JAXB 库的 eclipselink.jar,只要将 WebLogic 12.1.3 共享库 (EclipseLink v2.5.2) 中的 eclipselink.jar 复制到 WebLogic 12.1.2版本(EclipseLink v2.4.2)然后docx生成在WebLogic 12.1.2上运行,性能很好,就像在12.1.3上一样。
问题:
是否可以在不更换库的情况下提高带有 EclipseLink 2.4.2 的 WebLogic 12.1.2 的性能?例如,是否有任何 JVM 选项可能有所帮助?
当前 JVM 选项:
-Xms4096m -server -Xmx4096m -XX:MaxPermSize=512m -XX:MaxGCPauseMillis=69 -XX:ParallelGCThreads=8 -XX:ThreadStackSize=2048 -XX:SurvivorRatio=32 -XX:+DisableExplicitGC -XX:+AggressiveHeap - xloggc:/var/tmp/gc.log -Djava.awt.headless=true
【问题讨论】:
标签: jaxb garbage-collection weblogic eclipselink docx4j