本文为翻译的文章,作者Jasonb,原文:https://www.itworld.com/article/2764170/networking/tomcat-performance-tuning-tips.html
我经常收到一些关于如何调整Tomcat以获得更好性能的问题。通常来说,要回答这类问题,最好先花一些时间来了解Tomcat的安装,弄清楚网站的流量水平,懂得运行在Tomcat之上的web程序。但有一些通用的与这些重要细节无关的调优技巧。总的来说,当你遵循下面的做法时,Tomcat会运行得更好:
通过-Xmx开关,让JVM以更高的最大堆内存来启动。这个值设置得越高,Tomcat就有越多的内存可以使用。这意味着JVM不需要频繁的调用垃圾收集器,这样服务器就可以用更高比例的CPU时间来服务web请求。反过来,这意味着请求能够更快的完成。如果你的web应用运行在一个专门的服务器硬件上,那么在合理的范围内,尽量多给JVM分配服务器的物理内存。如果应用运行在共享的或者虚拟的机器上,那么请使用JConsole或者其他控制台(比如such asMuleSoft's Tcat Server控制台)来查看你的web应用在高负荷的情况下需要使用多少内存,这样你就能够设置一个更合理的最大堆内存值。
设置初始堆内存的值与最大堆内存相同(通过-Xms开关)。这意味着Tomcat在处理请求时,JVM永远不用调整或者重新分配堆内存。
调整连接器(web服务器)线程池的设置,让它与web请求负荷更接近。这有难度,但为了获得最好的性能表现,这么做非常重要。连接器里一个重要的属性就是maxTreads。这个值太低,就意味着你可能没有足够的线程来处理所有的请求,在这种情况下,请求只能空闲一段时间,直到另外一个请求线程被释放。这个值太低同时也意味着Tomcat将不能很好地利用服务器的硬件。这个值太高意味着Tomcat的启动时间比必需的要长,也意味着在负载的高峰时间,服务器可能会响应过慢,因为它要同时运行许多请求线程。基于峰值流量,通过设置不同的值来进行测试,把它设置正确。
调整其它连接器的属性设置:
compression:尝试把这个值设为on和off,看看哪种设置让你的web应用表现最好。你可能会对两者的差异感到惊讶。它的默认值是off。
compressableMimeTypes:如果你把compression设置为on,那么你需要同时设置这个属性,以便让Tomcat知道你想压缩什么。把它设置为象下面这样的一些值:text/html,text/xml,text/javascript,text/css,text/plain
其他重要的性能调优的因素还包括:
数据库性能:现在,很多的web应用都使用了关系型数据库。 这种情况下,数据库连接池的设置就很重要了。主要包括maxActive, maxIdle, maxWait,它们是定义数据库连接池的Resource元素里的属性。同样,你的数据库在测试的时候性能如何?Tomcat的性能可能会因为等待数据库查询完成而显著变慢。
HTTP Headers缓存:让浏览器缓存web应用的静态内容,可以大大提升用户能够感知到的性能。这项工作会比较耗时,因为把这个调整到最佳,几乎都与特定的web应用有关,而且需要对web应用有一些研究。但是,要让缓存工作,全都是关于Tomcat在响应web应用的静态文件请求时,如何正确地设置响应头和响应头的值。
HTTPS比HTTP要慢,但这是一种权衡。HTTPS是安全的,但HTTP不是。网络上的每次请求,HTTPS要传输的背景信息更多【译者注:碎嘴协议,指来回传输大量背景信息】。通常,用户浏览器的地理位置与Tomcat比较远的时候,HTTPS会让请求花的时间更长一些。只有把Tomcat服务器部署得离用户近一点才可以解决这个问题。
而且,通常人们丢掉Tomcat一半性能的方式,是把所有对Apache HTTPD的请求都代理给了Tomcat。 如果你想要最好的Tomcat性能,就不要这么配置。
原创文章,欢迎转载,但请注明出处。
欢迎大家关注本订阅号互联网全栈架构,长按下图即可。
领取专属 10元无门槛券
私享最新 技术干货