您当前的位置:首页 > 电脑百科 > 站长技术 > 服务器

Tomcat参数优化

时间:2023-11-08 13:56:42  来源:  作者:代码小人物

如何对Tomcat进行性能优化?

对于提供接口服务的应用程序来说,很多都使用SpringBoot默认的Servlet容器Tomcat。

上线之初,由于大部分流量较小,我们不会对Tomcat进行特殊的参数调整。

然而,随着流量的增加,应用的性能指标变得越来越差。这个时候我们大多数人都会选择扩容。除了扩容之外,我们还可以选择对Tomcat进行性能调优,在不增加成本的情况下提升性能。

今天我们将分享如何对Tomcat进行简单的性能调优,以提高应用程序的性能。

tomcat的架构

 

Tomcat参数优化

 

从上图可以看出,Tomcat将其业务抽象为Server, Service, Connector, ContAIner等组件,每个组件都有不同的作用。

Server组件是Tomcat的最外层组件,它是Tomcat实例本身的抽象,代表Tomcat本身。一个服务器组件可以有一个或多个服务组件。

Service组件是Tomcat中提供服务和处理请求的一组组件。一个服务组件可以有多个连接器和一个容器。多个Connector表示它可以使用多种协议同时接收用户请求。

连接器负责处理客户端连接,它提供对各种服务协议的支持,包括BIO、NIO、AIO等,它存在的价值在于屏蔽多协议Container的复杂性,统一Container的处理标准。

Container组件是负责具体业务逻辑处理的容器。当Connector组件与客户端建立连接时,它会将请求转发给Container组件的Engine组件进行处理。

至此,Tomcat的核心组件就基本完成了。其实Container组件里面还有很多细分的组件。如果你对业务的抽象感兴趣的话,可以继续看下去。

  • Engine组件代表一个可运行的Servlet实例,包含Servlet容器的核心功能,可以拥有一个或多个虚拟主机(Host)。其主要作用是将请求委托给合适的虚拟主机进行处理,即根据URL路径的配置来匹配合适的虚拟主机进行处理。
  • Host组件负责运行多个应用程序,并且它负责安装这些应用程序。它的主要功能是解析web.xml文件并匹配到相应的Context组件。
  • Context组件代表了具体的Web应用程序本身,它最重要的功能就是管理里面的Servlet实例。一个 Context 可以有一个或多个 Servlet 实例。
  • 一个WrApper组件代表一个Servlet,它负责管理一个Servlet,包括Servlet的加载、初始化、执行和资源回收等。包装器是最低级别的容器。

可以看出,Host是虚拟主机的抽象,Context是应用程序的抽象,Wrapper是Servlet的抽象,Engine是处理层的抽象

核心参数

在了解核心参数之前,我们需要对Tomcat对于请求的处理流程有一个大概的了解。

Tomcat对请求的处理流程如下。

Tomcat参数优化

 

在上面的示意图中,有三个非常关键的核心参数,这也是性能调优的关键。

  • acceptCount:当Container线程池达到最大数量且没有空闲线程,且Connector队列达到最大数量时,操作系统可以接受的最大连接数。
  • maxConnections:当Container线程池达到最大数量并且没有空闲线程时,Connector的队列可以接收的最大线程数量。
  • maxThreads:Container线程池中最大处理线程数。

从以上三个参数的含义,我们可以得知以下结论。

客户端并不直接与Tomcat的Connector组件建立联系,而是先与操作系统建立联系,然后交给Connector。

这一点非常重要,否则你将无法理解该acceptCount参数。

不仅Connector组件中有一个队列,操作系统中也有一个队列来临时存储与客户端的连接,这也是一个关键点。我们所说的线程池是指Container容器中的线程池。

理解这三个核心参数的含义非常重要,否则就没有办法进行后续的性能调优工作。

maxThreads

我们知道指的maxThreads是最大请求处理线程数,Tomcat7和Tomcat8都是默认的200。

该参数的设置需要根据任务的执行内容进行调整。一般来说,计算公式为:最大线程数 = ((IO time + CPU time)/CPU time) * CPU核心数。

这个公式的思想其实很简单,就是最大化的利用CPU资源。

任务的时间消耗分为IO时间消耗和CPU时间消耗。基本上IO时间消耗是最多的,此时CPU无事可做。

所以如果可以让CPU在任务等待IO的同时处理其他任务,那么CPU利用率就会提高。

一般来说,由于IO耗时远大于CPU耗时,所以maxThreads根据公式计算出来的数量会远大于CPU核数,这是正常的。

需要注意的是,这个值并不是越高越好。因为一旦线程过多,CPU就需要进行上下文切换,消耗部分CPU资源。因此,最好的办法是利用上面的公式计算出一个基准值,然后进行压力测试调整到合理的值。

一般来说,如果 的值maxThreads增大,但吞吐量没有增加或减少,则可能表明已经达到瓶颈。

maxConnections

maxConnections指当线程池中的线程达到最大值并且全部在忙时,Connector中的队列可以容纳的最大连接数。

一般来说,我们要设定一个合理的值,不能让它无限制地堆积。

因为Tomcat的处理能力肯定是有限的,到了一定程度就肯定处理不了了。所以,积累太多也是没有用的。反而会造成内存堆积,最终导致内存溢出OOM。

一般来说,经验值可以设置为与 maxThreads相同的大小。

这样比较合理,因为队列中的连接最多只需要等待线程处理一个任务,就不会等待太久,响应时间也不会太长。如果想缩短响应时间,可以调整maxConnections低于maxThreads,这样可以减少一些响应时间。

但需要注意的是,如果降得太低,性能可能会严重下降,吞吐量也会降低。

acceptCount

acceptCount指当Container线程池达到最大数量并且没有空闲线程且Connector队列达到最大数量时,操作系统可以接受的最大连接数。

当队列中的数量达到最大值时,所有传入的请求都将被拒绝。默认值为100。这可以理解为操作系统的一种自我保护机制。如果积累的太多无法处理,那就直接拒绝,以保护自己的资源。

该参数的调优资料相对较少,但根据其含义,不建议该值大于maxConnections。

因为这个队列中的连接需要等待。如果该值太大,则意味着会有很多连接没有被处理。

连接越多,等待时间越长,响应时间越慢。如果想要较短的响应时间,您可能应该降低该值。

有的同学会问,既然有了acceptCount,为什么还需要呢maxConnections?这不是重复了吗?其实在BIO中,这两个值基本是一致的。

猜测是因为后来NIO,AIO等技术的出现操作系统可以接受更多的客户端连接。

因此,操作系统可以先建立连接缓存,然后Connector就可以直接从操作系统获取连接,这样就不需要等待操作系统建立耗时的TCP连接,从而提高效率。

其它参数

除了以上三个参数之外,还有几个非核心参数,但我认为还是有一定作用的。

  • connectionTimeout:表示连接建立后等待超时时间。如果超过这个时间,则直接返回超时时间。
  • minSpareThreads:表示最小存活线程数,即如果没有请求,那么必须保持存活的最小线程数。该参数与是否存在突发流量有关。在突发流量的情况下,如果该值太低,瞬时响应时间会比较长。

 

总结

今天我们分享了Tomcat的核心组件,然后讲解了Tomcat在处理请求时的三个核心参数以及调优经验。

对于maxThreads参数来说,如果按照公式计算,我们需要获取IO时间和CPU时间,但实际上这两个值并不容易获取。

所以一般来说,我们可以通过压力测试得到一个比较合适的maxThreads。

对于该maxConnections参数,您可以设置与maxThreads 相同的值,然后根据具体情况进行调整。如果你想减少响应时间,可以稍微调低,否则可以调高。

对于该acceptCount参数,其调优逻辑与maxConnections 类似,可以类似maxConnections 进行设置,然后根据相应的时间要求进行微调。



Tags:Tomcat   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除。
▌相关推荐
Tomcat参数优化
如何对Tomcat进行性能优化?对于提供接口服务的应用程序来说,很多都使用SpringBoot默认的Servlet容器Tomcat。上线之初,由于大部分流量较小,我们不会对Tomcat进行特殊的参数调整...【详细内容】
2023-11-08  Tags: Tomcat  点击:(0)  评论:(0)  加入收藏
Tomcat配置参数原来这么玩?
connectionTimeout参数是说当客户端有服务器连接以后,如果客户端不输入任何内容,那么超过了connectionTimeout设置的时间后连接会被断开。application.yml配置server: port:...【详细内容】
2023-10-11  Tags: Tomcat  点击:(40)  评论:(0)  加入收藏
Tomcat目录结构详解:从新手到专家的指南
Tomcat 目录结构图如下: 1、bin 目录存放一些可执行的二进制文件,****.sh 结尾的为 linux 下执行命令,****.bat 结尾的为 windows 下执行命令。 catalina.sh:真正启动 tomcat 文...【详细内容】
2023-09-27  Tags: Tomcat  点击:(37)  评论:(0)  加入收藏
详解Tomcat配置参数connectionTimeout意义
connectionTimeout参数是说当客户端与服务器连接以后,如果客户端不输入任何内容,那么超过了connectionTimeout设置的时间后连接会被断开。​环境:springboot2.5.12application....【详细内容】
2023-09-01  Tags: Tomcat  点击:(87)  评论:(0)  加入收藏
Tomcat环境部署
Tomcat简介Tomcat 是 Java 语言开发的,Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,是 Apache 软件基金会的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他...【详细内容】
2022-10-17  Tags: Tomcat  点击:(314)  评论:(0)  加入收藏
Tomcat回显技术学习汇总
01简 介2022年初打算把反序列化漏洞后利用技术给学习下,主要分为回显技术和内存马技术两大模块。因为之前对回显技术有所了解,就先把这块知识给弥补下。02搭建环境采用简单的S...【详细内容】
2022-10-09  Tags: Tomcat  点击:(103)  评论:(0)  加入收藏
瞅瞅,这还是你熟悉的Tomcat吗?
一、Tomcat 架构概览 1、Tomcat是什么?Apache Tomcat软件是Jakarta Servlet、 Jakarta Server Pages、 Jakarta Expression Language、 Jakarta WebSocket、 Jakarta Annota...【详细内容】
2022-07-08  Tags: Tomcat  点击:(349)  评论:(0)  加入收藏
tomcat制作https证书
https分为单项认证和双向认证。一般https页面上的访问都是单项认证,服务端发送数字证书给客户端,客户单方面验证。而服务端不做验证。而双向认证,需要双方都有证书,然后发送给对...【详细内容】
2022-05-29  Tags: Tomcat  点击:(335)  评论:(0)  加入收藏
Tomcat9及以下升级Tomcat10 部署操作
Tomcat10升级介绍Tomcat10 修补了之前版本的漏洞,主要是javax的漏洞,导致使用javax jar包的项目不能直接部署,需要使用官方工具转换。Apache官网提供转换程序 https://github.c...【详细内容】
2022-05-26  Tags: Tomcat  点击:(993)  评论:(0)  加入收藏
Apache Tomcat如何高并发处理请求
介绍作为常用的http协议服务器,tomcat应用非常广泛。tomcat也是遵循Servelt协议的,Servelt协议可以让服务器与真实服务逻辑代码进行解耦。各自只需要关注Servlet协议即可。 对...【详细内容】
2022-05-11  Tags: Tomcat  点击:(387)  评论:(0)  加入收藏
▌简易百科推荐
web服务器json-serve详解
简介JSON-Server 是一个 Node 模块,运行 Express 服务器,你可以指定一个 json 文件作为 api 的数据源。一、安装 JSON-Serve (Install JSON Server)使用 npm 或 yarn 工具安装...【详细内容】
2023-11-09  web技术的分享者  今日头条  Tags:web服务器   点击:(2)  评论:(0)  加入收藏
Tomcat参数优化
如何对Tomcat进行性能优化?对于提供接口服务的应用程序来说,很多都使用SpringBoot默认的Servlet容器Tomcat。上线之初,由于大部分流量较小,我们不会对Tomcat进行特殊的参数调整...【详细内容】
2023-11-08  代码小人物    Tags:Tomcat   点击:(0)  评论:(0)  加入收藏
Meta 的无服务器平台是如何做到每天处理数万亿次函数调用的
作者 | Leonardo Creed译者 | 平川策划 | Tina本文最初发布于 Engineer’s Codex 博客。Meta 的无服务器平台 XFaaS“每天要处理来自数十个数据中心区域的 10 万多台服...【详细内容】
2023-11-02    InfoQ  Tags:服务器   点击:(13)  评论:(0)  加入收藏
云服务器应用优势分析,你知道有哪些有事吗?
随着云计算、物联网等新兴技术的蓬勃发展,越来越多的企事业单位开始将IT业务逐步向云服务器转移。企业上云已成为趋势。加快信息化进程,业务上云。对于企业用户来说,云服务器在...【详细内容】
2023-11-02  Dotnet讲堂  微信公众号  Tags:云服务器   点击:(11)  评论:(0)  加入收藏
显卡服务器的特点和优势在哪里
随着科技的发展以及人们对于计算机性能的需求提高,显卡服务器是主要使用图形处理器进行计算和运算,拥有更加强大的计算能力,今天小编就来给大家讲一讲显卡服务器的特点和优势是...【详细内容】
2023-10-31  万恒网络科技    Tags:显卡服务器   点击:(0)  评论:(0)  加入收藏
掌握Nginx的高级用法,构建高性能Web应用
Nginx是一款高性能的Web服务器和反向代理服务器,它广泛用于构建高性能、可靠和安全的Web应用程序。除了基本的用法外,Nginx还提供了一些高级功能和配置选项,可以进一步优化性能...【详细内容】
2023-10-26  树言树语Tree  今日头条  Tags:Nginx   点击:(21)  评论:(0)  加入收藏
分享Nginx搭建Web测试报告服务器的落地方案
Nginx搭建web测试报告服务器的实现思路有这样一个需求:把自动化测试过程中生成的html测试报告能够通过浏览器直接访问查看!实现思路很简单,就是部署一个web服务器,然后把测试报...【详细内容】
2023-10-26  测试开发Kevin  今日头条  Tags:Nginx   点击:(17)  评论:(0)  加入收藏
轻松利用日志动态分析平台玩转Nginx运维管理
一、分享背景1、关于此次分享(1) 关于炎凰数据炎凰数据是一家专注于打造自主知识产权的大数据处理平台的公司。(2) 关于鸿鹄鸿鹄是炎凰数据为广大开发者(研发人员、数据分析...【详细内容】
2023-10-24  DataFunTalk  微信公众号  Tags:Nginx   点击:(23)  评论:(0)  加入收藏
如何确定Apache Kafka的大小和规模
作者丨Andrew Mills编译丨云昭调整或扩展Kafka以获得最佳成本和性能的第一步是了解数据流平台如何使用资源。这里给一些实用的建议。实现Apache Kafka的团队,或者扩展他们对...【详细内容】
2023-10-23    51CTO  Tags:Kafka   点击:(20)  评论:(0)  加入收藏
Nginx配置指南:快速安装与反向代理设置
Nginx是一个开源的高性能HTTP和反向代理服务器,它也可以用作邮件代理服务器和通用的TCP/UDP代理服务器。在本文中,我将详细介绍如何安装和配置Nginx,并介绍Nginx的主要配置文...【详细内容】
2023-10-17  树言树语Tree  今日头条  Tags:Nginx   点击:(30)  评论:(0)  加入收藏
站内最新
站内热门
站内头条