Tomcat18个常用优化技巧

Apache Tomcat是Java Servlet和JavaServer页面技术的开源软件实现。这个servlet容器软件为众多跨不同行业和组织的大型、关键任务的web应用程序提供支持。

预编译jsp页面

尽可能预编译Java服务器页面(JSP),这是主要的JSP优化。

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

将Tomcat开发模式设置为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值为允许无限的请求。

设置超时时间,尽可能降低此值

Apache Timeout和KeepAliveTimeout的值,应尽量设置得低一些,以使生产环境能够有更好的表现。

定位内存泄漏

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

重新部署应用导致的内存泄漏

利用tomcat提供的重新部署应用功能,有可能导致内存泄漏。如果一个类同时由Tomcat和web应用程序加载,那么两者都引用了此类,当web应用程序停止时,Tomcat类装入器仍然引用它所装载的类,只要存在引用,对象就不会被垃圾收集回收,尤其是JDBC驱动程序和日志框架。

合理利用Web浏览器的缓存功能

通过在浏览器端缓存静态内容,将大大提升用户在网络方面的体验,对于web应用程序所涉及的静态文件,在HTTP响应头中设置合理的缓存值。

混合使用HTTPS

使用HTTP能够大大减少通信时间,但HTTPS对于安全和机密数据至关重要。针对业务使用不同的协议,能够大大提升响应时间。