在WebLogic 12.1.2上使用docx4j生成带有嵌入图像的数百页docx文档文件时,性能比在同一虚拟机上运行的WebLogic 12.1.3上的相同操作慢约5倍w /相同的JVM配置 - 12.1.2约为20分钟,12.1.3为4分钟。
go top获取CPU和内存统计信息,使用jstat -gc获取垃圾回收统计信息。在生成doc时,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相关但是没有直接控制docx4j)。
该问题已被隔离到eclipselink.jar,其中包含JAXB库,只要在WebLogic 12.1.2上复制来自WebLogic 12.1.3共享库(EclipseLink v2.5.2)的eclipselink.jar时版本(EclipseLink v2.4.2)然后在WebLogic 12.1.2上运行docx生成,性能良好,就像在12.1.3上一样。
问题:
如果不更换库,可以改进WebLogic 12.1.2 w / EclipseLink 2.4.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
答案 0 :(得分:1)
您可以尝试创建包含EclipseLink 2.5.2的WebLogic共享库,并从WebLogic 12.1.2上部署的应用程序中引用它: