我面临一个奇怪的问题,apache fop将fo文件转换为pdf在服务器上运行速度非常慢(tomcat 7,liferay 6.2),但在本地运行速度很快(tomcat 7,liferay 6.2)。
服务器上的需要2分钟,但本地只需几秒钟 如果在服务器上使用命令行也是正常的,也需要几秒钟。
pdf大约是80页,因为xsl文件太大,我不能在这里发帖。
我们在本地和服务器上监控GC,发现在本地有1个或2个次要GC发生,而服务器次要GC每1或2秒发生一次。并且每个gc释放像500m内存,所以看起来在服务器上它产生的垃圾比在本地产生的垃圾更多。
同样在服务器上运行时,cpu使用率几乎保持在5%。
我的代码示例,尝试使用catch块:
fopFactory = FopFactory.newInstance(xconf);
FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
outStream = new ByteArrayOutputStream();
Fop fop;
fop =fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, outStream);
Result res = new SAXResult(fop.getDefaultHandler());
new net.sf.saxon.TransformerFactoryImpl().newTransformer().transform(foFile, res)
任何想法都将受到高度赞赏!
更新
我通过添加类似log4j.logger.org.apache.fop = info的东西修复了这个问题。 我们之前已经将log4j.logger.org.apache设置为DEBUG,因此我们认为记录过多会引发问题。