Tomcat优化

Tomcat是servlet、jsp规范的开源实现,为java web应用提供支持。

预编译jsp

预编译jsp是主要通用优化手段。

http://tomcat.apache.org/tomcat-9.0-doc/jasper-howto.html

将开发模式设为False

使用Jasper 2在开发环境中将其设置为true,生产环境应设为false。

http://tomcat.apache.org/tomcat-9.0-doc/jasper-howto.html

genStringAsCharArray设为True

生产环境使用Jasper 2,应将genStringAsCharArray设置为true。

http://tomcat.apache.org/tomcat-9.0-doc/jasper-howto.html

提高modificationTestInterval值

生产环境使用Jasper 2,当development为true时,modificationTestInterval值设置更高,能显著提升性能。

trimspace设置为true

生产环境中使用Jasper 2,将trimSpaces设置为true,将返回数据中无用空格删除。

静态页面替换动态页面

若动态页面很少更改,将其设计成静态页面。定期生成静态页面。

缓存页面

应用设计允许的话,尝试缓存静态和动态页面。

使用分析器

开发过程中使用profiler(如:JProbe、JProfiler),查看在应用中cpu、内存、网络连接、外部存储热点位置,寻找使用最频繁,性能影响最显著的部分重新设计。

发现瓶颈

寻找线程同步的瓶颈,特别是临时发起的线程。

服务器处理连接的模式

连接是昂贵的,无论是http事务、服务器端的tcp还是http Keep-Alive设置,都应注意每个连接产生的性能影响。

减少连接数量可提高性能,但若不了解应用在何时如何与外部环境进行连接,就不可能做到这一点。

使用连接池

使用连接池重用连接,而不是反复关闭和重新打开连接。

连接池线程数

通常有效利用连接池线程数在200~800个,但最佳数量取决于应用程序和主机。

若cpu占用率很高、减少此值,综合考虑对其他应用的影响。

合理设置maxKeepAliveRequests

Apache中每个tcp连接(maxKeepAliveRequests)的最大http请求数默认为100,生产中较高的值(如:1,000)通常有更好的性能。0表示允许无限的请求。

超时时间尽可能低

应尽量降低Timeout和KeepAliveTimeout值,使其在生产环境能有更好表现。

定位内存问题

使用商用或免费分析工具很容易识别Tomcat内存问题,如:Oracle jdk提供的问题排查工具Java飞行记录器(Flight Recorder)、jmap、jhat、YourKit。

利用tomcat提供的重新部署功能,有可能导致内存问题。

若一个类同时由tomcat和web应用加载,两者会同时引用此类,当web应用停止时,tomcat类装入器仍引用此类,对象不会被垃圾收集回收,尤其jdbc驱动程序和日志框架。

合理利用浏览器缓存

在浏览器端缓存静态内容,将大大提升用户体验,web应用程序所涉及的静态文件,在http响应头中设置合理缓存值。

混合HTTPS

http能大大减少通信时间,https对于安全至关重要。针对业务使用不同协议,能大大提升响应时间。