解决Enovia在WAS 8.0运行缓慢的问题小计

Enovia在Tomcat环境下运行正常,但部署到WAS后每个页面打开都很慢,主jsp文件打开都在3-4秒,即使是很简单的页面也是如此,非常奇怪的问题。

刚开始是怀疑是WAS中JVM参数的问题,但修改了内存相关的参数无效。考虑到我们在系统空闲的时候2个人测试,页面打开依然慢,想来也不是在内存方面存在瓶颈。

没办法,再次想到了Profiler工具。这次依然使用了Yourkit Java Profiler,经过观察找到了下图的一个疑点:

产生一个XSLTransformer对象居然要花费了10%的时间,按照这个关键词搜索,在IBM网站上找到了一个非常相像的案例:

XSLT transformations cause high CPU and slow performance

大意是IBM认为产生XSLT transformations对象的模板类应该是”一次产生,多次复用“的,因此对产生的对象进行了优化,结果就是模板类产生慢,但后期运行的时候速度快。不幸的是有些应用程序开发的时候没有按照IBM的原则,每次都重新生成一个模板类,造成性能问题。这个文章中有两个解决思路:

1、修改程序,指定产生XSLT transformations对象使用的工厂类。

TransformerFactory tFactory =TransformerFactory.newInstance("org.apache.xalan.processor.TransformerFactoryImpl", null);

2、增加JVM运行参数

-Djavax.xml.transform.TransformerFactory=org.apache.xalan.processor.TransformerFactoryImpl

因为Enovia为购买产品,无法修改源代码,只能按照第二种方法进行测试。

在Apache网站下载了xalanjar包,放到ecnovia的war包的WEB-INF/lib路径下,修改jvm参数并重启后,页面打开的速度得到了很大提升,主jsp文件打开速度下降到1秒多一点,比Tomcat的运行速度还要快一点,至此问题圆满解决。

Comments are closed.