自升级到Tomcat 8以来,为什么我的JSP应用程序显着放缓?

时间:2015-12-04 16:47:09

标签: jsp tomcat

将旧版JSP应用程序从Tomcat 7 / Java 7升级到Tomcat 8 / Java 8后,页面响应时间明显恶化;有些页面需要4到5倍的加载时间 我在Tomcat 8迁移说明的JavaServer Pages 2.3 section中找到了这个:

"统一表达式语言3.0增加了对引用静态字段和方法的支持。在JSP中支持此功能需要更改javax.servlet.jsp.el.ScopedAttributeELResolver实现,以便它还检查标识符以查看它们是否是导入的类或字段的名称。在某些情况下,此更改会导致显着减速。这会影响可能引用页面,请求,会话或应用程序作用域变量的标识符,或者可能未定义。未定义时,解析标识符需要更长的时间,因为现在还要检查它是否是导入的类或字段。"

这在某种程度上解释了减速,因为应用程序包含许多(100' s).jsp和.tag文件,其中包含对未编组变量的引用。果然,在Tomcat进程上运行strace我可以看到类加载器试图解析这些引用,例如。

    Line 7063: 27709 13:42:46.248512 stat("/opt/tomcat/webapps/App/WEB-INF/classes/java/lang/width.class", 0x7f69cc9eb4f0) = -1 ENOENT (No such file or directory)
    Line 7075: 27709 13:42:46.250092 stat("/opt/tomcat/webapps/App/WEB-INF/classes/javax/servlet/width.class", 0x7f69cc9eb4f0) = -1 ENOENT (No such file or directory)
    Line 7085: 27709 13:42:46.251337 stat("/opt/tomcat/webapps/App/WEB-INF/classes/javax/servlet/http/width.class", 0x7f69cc9eb4f0) = -1 ENOENT (No such file or directory)
    Line 7095: 27709 13:42:46.252548 stat("/opt/tomcat/webapps/App/WEB-INF/classes/javax/servlet/jsp/width.class", 0x7f69cc9eb4f0) = -1 ENOENT (No such file or directory)

每次访问页面时都会看到此行为。我有两个问题:

1。)是否有办法将Tomcat 8配置为像Tomcat 7一样处理未编码的变量,因此我不必浏览100个插入的.jsp和.tag文件适当的范围?

2.。)为什么每次访问页面时都会发生这种情况?我理解为什么它会在第一次发生,但是一旦页面被编译,JSP引擎(Jasper)就确定了正确的范围。

0 个答案:

没有答案