2015-05-05 164 views

回答

22

由于您的项目已经在tomcat 7上运行,我建议保持现状一段时间。有关tomcat 8性能改进的数据不多。有些问题在互联网上有报道,这是任何新产品发布的常见问题。

Tomcat 8在并发环境中具有更好的性能。

根据我对tomcat产品的经验,除非您有非常资源密集的应用程序,否则很可能升级不会导致任何显着的性能。请阅读下面的链接升级换代之前

http://events.linuxfoundation.org/sites/events/files/slides/2014-04-09-Migrating-to-Apache-Tomcat-8.pdf

重要变化

的Java 1.7 ==>第一个重要的变化是,Tomcat的8现在需要Java 7或更高版本才能运行,因此,如果你是从早期的Tomcat版本迁移,应该升级到Java 7

Specification Changes 

Servlet 3.1 (JSR 340) 
JSP 2.3 (JSR 245 maintenance release) 
EL 3.0 (JSR 341) 
WebSocket 1.0 (JSR 356) 

Specification Changes: EL 3.0 

Coercion of nulls to Number, Character or Boolean 
- EL 2.2 and earlier (0, 0, false) 
- EL 3.0 and later (null, null, null) 
System property 
– org.apache.el.parser.COERCE_TO_ZERO 
– Set to true for EL 2.2 behaviour 

Specification Changes: JSP 2.3 

Minor changes to reflect the changes in EL 3.0 
JSP 2.3 
– Supported: GET, POST and HEAD 
– Undefined: Everything else 
JSP 2.2 and earlier 
– Undefined: Most implementations assumed all 
Tomcat only permits GET, POST and HEAD 
– Protection against verb tampering 

Specification Changes: WebSocket 1.0 

Tomcat 7 initially shipped with a proprietary WebSocket API 
- Tomcat 8 ships with a JSR 356 WebSocket implementation 
– Also back-ported to Tomcat 7 
- The proprietary WebSocket API is deprecated in Tomcat 7 
- Applications using the proprietary API need to migrate 
– Relatively simple 
– https://svn.apache.org/r1424733 

Specification Changes: Servlet 3.1 

- Session ID changes by default on authentication 
– Prevents session fixation 

Tomcat Changes: 

Connectors 

Default connector has changed from BIO to NIO 
– BIO is likely to be dropped for Tomcat 9 
- Only BIO option not supported by NIO is irrelevant for NIO 
– disableKeepAlivePercentage 
- May notice different network/CPU loads 
– More established, idle connections 
– Marginally higher CPU load 

Static Resources 

Tomcat 7 
– Aliases 
– VirtualLoader 
– VirtualDirContext 
– JAR resources 
– External repositories 
- All variations on a theme 
- Each implemented differently 


Tomcat 8 
– New WebResources implementation 
▪ JAR resources 
– External resources for class loader 
- Completely new configuration 
- Caching attributes removed from Context 

Resources now defined by as: 
– Pre-resources 
– Main resources 
– JAR resources 
– Post-resources 

Resources attributes: 
– base 
– internalPath 
– webappMount 
– readOnly 

Internal APIs 

- Lots of changes 
– Manager, Loader and Resources are now Context only 
– Mapper moved from Connector to Service 
– WebResources 
- If you extend a Tomcat class, review the API docs 

Database Connection Pools 

- Tomcat 7 and earlier based on DBCP 1 
- Tomcat 8 based on DBCP 2 
- Better performance in concurrent environments 
– Comparable to Tomcat’s JDBC pool 
- There are some changes to configuration attributes 
– Reflect consistency changes made in Commons Pool 2 
- maxActive -> maxTotal 
- maxWait -> maxWaitMillis 
- Validation no longer requires a validation query 
– Uses Connection.isValid() 

服务器连接

就服务器连接器而言,默认的HTTP和AJP连接器实现已从Java阻塞IO实现(BIO)切换到Java非阻塞IO实现(NIO)。较旧的BIO可能仍然可以使用,但使用非阻塞IO的Servlet 3.1和WebSocket 1.0功能将回退到阻塞IO,这可能会导致意外的应用程序行为。

Web应用程序资源

的资源元素是配置的一部分,代表所有可用的Web应用程序的资源进行了修订。现在它包括类,JAR文件,HTML,JSP和任何其他有助于Web应用程序的文件。提供实现来使用目录,JAR文件和WAR作为这些资源的来源,并且可以扩展资源实现以提供对以其他形式存储的文件(例如在数据库或版本化存储库中)的支持。

远程调试

当与JPDA选项启动Tomcat 8启用远程调试,8 Tomcat的localhost上侦听:8000在默认情况下。早期版本在*:8000上进行监听。如果需要,可以通过在例如setenv。[bat | sh]中设置JPDA_ADDRESS环境变量来覆盖此缺省值。

变化API

虽然Tomcat的8个内部API是广泛兼容的Tomcat 7已经出现在详细度的许多变化和它们不是二进制兼容的。与Tomcat内部交互的自定义​​组件的开发人员应该检查相关API的JavaDoc。

特别值得注意的是:

经理,装载机和资源从容器转移到上下文语境,因为只有使用它们的地方。

由于映射器对于给定服务的所有连接器都是相同的,因此映射器已从连接器移动到服务。

正如我们所说,有一个新的资源实现将别名,VirtualLoader,VirtualDirContext,JAR资源和外部存储库合并到一个框架中,而不是为每个功能单独配置。

提供有关在Tomcat中8的变化更多信息的某些链接给出低于Tomcat本身

http://people.apache.org/~markt/presentations/2013-09-Apache-Tomcat8.pdf

https://tomcat.apache.org/tomcat-8.0-doc/changelog.html

6

以下是自己何时升级的方法。现在,您可以使用Tomcat,任何版本的使用,或在将来,它不只是包括升级从Tomcat 7到Tomcat 8

大多数变化到Tomcat 当一个主要版本改变是升级构建特定版本的servlet,JSP和JDK规范。如果您的应用程序不需要更新的规范,并且您使用的版本没有“归档”(本文撰写时Tomcat 7未归档),则可能不需要升级。 http://tomcat.apache.org/whichversion.html涵盖了如何进行选择。

在现实世界的情况下,您的选择也可能受其他因素的影响,例如您的制作发行版中包管理器是否支持您想要的版本。 或者相反,如果您的发行版仅包含特定版本的Tomcat,则可以升级,因为它可以节省大量时间。

请记住,新功能还意味着可能出现新的错误。如果你没有使用新的Tomcat版本的规格,你是否想冒一些破坏的机会?仅仅因为某个版本具有更高性能的潜力并不意味着它不会在您的独特部署环境中崩溃。如果你能负担得起,最好的答案是在负载平衡器后部署两个版本,以防新的版本无法正常工作。

也就是说,软件总是有所改进。我建议您阅读发行说明,了解您选择的各种版本主要版本的发布情况,以便根据自己的情况选择最佳版本。例如,https://tomcat.apache.org/tomcat-8.0-doc/RELEASE-NOTES.txt涵盖了8.0版本。

一旦你选择了一个主版本,你一般都想使用它的最新版本,因为随着时间的推移bug会得到修复。

+0

不仅更加错误,而且在开发工具,例如“服务Eclipse中的“没有发布的模块”功能在Tomcat 8中效果不佳。 – rustyx

2

查看下面tomcat 8的新特性。这将有助于决定是否迁移,如果你需要它们。

Tomcat 8.0版本与Java EE 7规范保持一致。它支持:

  • 它支持的Java Servlet 3.1
  • Java服务器页(JSP)2.3
  • 爪哇统一表达式语言(EL)3.0
  • 爪哇WebSocket的1.0

Tomcat的8可以使用Apache便携式运行时提供卓越的可伸缩性,性能以及与本机服务器技术的更好集成。

在服务器连接器而言,默认HTTP和AJP连接器实现已经从Java阻塞IO实现(BIO)到Java非阻塞IO实现(NIO)

另请注意,Tomcat的8切换需要Java 7或更高版本才能运行,因此只有在项目中至少使用Java 7时才能迁移。