Tomcat调优Service

这篇具有很好参考价值的文章主要介绍了Tomcat调优Service。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文皆为tomcat配置文件server.xm中Service模块配置优化

1. HTTP/1.1 协议的协议处理器选择

tomcat启动的时候,可以通过日志看到Connector使用的是哪一种协议处理器
Tomcat调优Service,tomcat,java

1.1. Http11AprProtocol(推荐)

<Connector protocol="org.apache.coyote.http11.Http11AprProtocol" />
  • 基于 Apache Portable Runtime(APR)库实现的协议处理器;
  • 使用基于 epoll 或 kqueue 的 I/O 模型,支持非阻塞 I/O 和事件驱动模型,具有很好的性能和可伸缩性;
  • APR 是一种跨平台的 C 库,在性能和资源利用率方面比 Java 实现更优秀;
  • 适用于高并发、高吞吐量 Web 应用场景,特别是对于低延时、高并发的短连接请求具有更好的性能表现。

虽然apr在性能、资源利用等各方面综合能力都比nio2好,但需要注意的是:如果是docker模式使用tomcat则可直接使用apr模式,无需安装arp库;如果非docker环境,则需先安装APR库,并配置好相关的环境变量和库文件路径,比较麻烦。此外,APR 也有一些局限性,如不支持 Windows 系统、需要手动编译等。

1.2. Http11Nio2Protocol(小服务器适用)

<Connector protocol="org.apache.coyote.http11.Http11Nio2Protocol" />
  • 基于 NIO2(Java 7 版本引入)实现的高性能、可伸缩的协议处理器;
  • 支持非阻塞 I/O 和事件驱动模型,可以处理大量并发连接;
  • 安全性和稳定性较高,因为它是纯 Java 实现,不依赖任何外部库或操作系统;
  • 适用于高并发、高吞吐量的 Web 应用场景,特别是对于长连接、异步请求等复杂场景的性能表现更好。

相比之下,Http11Nio2Protocol更加易用和便捷(主要是不需要安装依赖库),但它相对于Http11AprProtocol性能、资源利用等略有劣势。

2.开启线程池

默认tomcat不开启线程池,即n个请求就是n个线程。而线程池是一种用于管理和复用线程的机制,它可以有效地管理线程的创建、执行和销毁,提供了一种线程资源的调度和管理方式。线程池在多线程编程中具有以下几个重要的作用:

  • 提高性能和效率:线程池可以避免频繁地创建和销毁线程,从而减少了线程创建和上下文切换的开销,提高了系统的性能和效率。通过重复利用已创建的线程,线程池可以更好地利用可用的系统资源。
  • 控制并发线程数量:线程池可以限制同时执行的线程数量,通过设置线程池的大小和可用的线程数,可以控制并发线程的数量,防止系统被过多的线程占用,避免资源耗尽和系统崩溃等问题。
  • 提供任务队列和调度机制:线程池通常会包含一个任务队列,用于存储等待执行的任务。当线程池中有空闲线程时,它会从任务队列中获取任务并执行。如果任务队列已满,新提交的任务可能会被暂时存储或根据配置进行拒绝处理。线程池可以根据自定义的调度策略来管理任务的执行顺序和优先级。
  • 提供线程管理和监控功能:线程池可以提供对线程的生命周期进行管理,包括线程的创建、销毁和状态管理。通过线程池,可以方便地监控线程的执行情况、统计线程的使用情况和性能指标,便于系统调优和故障排查。

总之,线程池在多线程编程中起着重要的作用,可以提高系统的性能、提供并发控制和任务调度机制,并简化线程管理和监控的工作。合理使用线程池可以避免线程过多造成的资源浪费和性能下降,同时提高代码的可维护性和可扩展性。

1.1配置开启

Service模块开启线程池

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="500" minSpareThreads="30"/>

Service模块链接器指定调用线程池

 <Connector executor="tomcatThreadPool"
    		port="8080" protocol..../>

最终配置如下图
Tomcat调优Service,tomcat,java

1.2. 参数配置

当connector配置的参数与executor参数重复时,将以connector为主

参数 说明
protocol 协议处理器,极致性能、资源利用请使用apr
maxThreads Tomcat使用线程来处理接收的每个请求,这个值表示Tomcat可创建的最大的线程数,即支持的最大并发连接数,默认值是200,一般建议在 500 ~ 800
maxQueueSize 最大等待队列数,maxThreads满时,请求会进入等待队列
acceptCount 控制连接器可以接收的最大请求数量。当所有线程都处于繁忙状态且请求队列已满时,新的请求将被拒绝或丢弃。这个属性用于限制连接器队列中等待处理的请求数量,避免过多的请求导致服务器资源耗尽,即maxQueueSize满时,会触发此参数,此参数满就会拒绝后续的请求
enableLookups 使用DNS查询,用于控制是否启用 DNS 查找。如果启用了 enableLookups,Tomcat 将会尝试将客户端的 IP 地址解析为主机名,这可能会导致一些性能问题。如果禁用了 enableLookups,则 Tomcat 不会进行 DNS 查找,从而可以避免这些性能问题
minSpareThreads 最小空闲线程数,Tomcat 启动时的初始化的线程数,表示即使没有人使用也开这么多空线程等待,默认值是 10。
prestartminSpareThreads 在 Tomcat 初始化的时候就初始化 minSpareThreads 的参数值,如果不等于 true,minSpareThreads 的值就没啥效果了
maxIdleTime 如果当前线程大于初始化线程,那空闲线程存活的时间,单位毫秒,默认60000=60秒=1分钟
maxPostSize 设置由容器解析的URL参数的最大长度,小于0为禁用这个属性,默认为2097152(2M) 请注意, FailedRequestFilter 过滤器可以用来拒绝达到了极限值的请求
maxHttpHeaderSize http请求头信息的最大程度,超过此长度的部分不予处理。一般8K
compression 是否启用GZIP压缩 on为启用(文本数据压缩) off为不启用, force 压缩所有数据
compressableMimeType 压缩的数据类型
acceptorThreadCount protocol为nio或nio2才生效,用于指定接受连接的线程数量,默认1,但是一般设置2
disableUploadTimeout 上传时是否使用超时机制

1.2.1. maxThreads、acceptCount、maxQueueSize触发的顺序

在 Tomcat 中,请求的处理顺序如下:

  1. 当有新的请求到达时,Tomcat 首先检查连接器线程池中是否有可用的空闲线程。
  2. 如果有可用的空闲线程,Tomcat 会立即将请求分配给其中一个线程进行处理。
  3. 如果所有的线程都处于繁忙状态,Tomcat 将把请求放入连接器的请求队列中等待处理。
  4. 当请求进入请求队列时,Tomcat 会根据 maxQueueSize 参数来判断队列是否已满。
  5. 如果队列未满,请求将被添加到队列的末尾,等待线程池中的线程变为可用时再进行处理。
  6. 如果队列已满,Tomcat 将根据 acceptCount 参数来决定是否接受该请求。
  7. 如果请求被接受,Tomcat 将继续等待线程池中的线程变为可用后进行处理。
  8. 如果请求被拒绝或丢弃,客户端可能会收到连接失败或超时的错误。

因此,maxThreads 控制线程池中线程的数量,maxQueueSize 控制请求队列的容量,而 acceptCount 用于限制连接器可以接受的请求数量。在处理请求时,Tomcat 首先会尽量使用线程池中的空闲线程,然后将请求放入请求队列中,最后根据 acceptCount 来决定是否接受请求。文章来源地址https://www.toymoban.com/news/detail-782934.html

到了这里,关于Tomcat调优Service的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 性能优化-中间件tomcat调优

    主要有三个: 管理Servlet应用的生命周期。Tomcat可以管理和控制Servlet应用程序的启动、停止、暂停和恢复等生命周期过程,确保Servlet应用的稳定运行和有序管理。 把客户端请求的url映射到对应的servlet。Tomcat作为一个Web服务器,可以将客户端发送的HTTP请求URL映射到相应的Se

    2024年02月07日
    浏览(51)
  • tomcat如何调优,涉及哪些参数?

    Apache Tomcat 是一个开源的 Java Servlet 容器,用于部署和运行 Java Web 应用程序。为了提高 Tomcat 的性能和可伸缩性,可以对其进行调优。下面是一些常见的 Tomcat 调优参数和相关说明: 1.内存设置: -Xms: 设置 Java 虚拟机(JVM)的初始堆大小。 -Xmx: 设置 JVM 的最大堆大小。可以根据服

    2024年02月09日
    浏览(45)
  • 性能测试 —— Tomcat监控与调优:Jconsole监控

    JConsole的图形用户界面是一个符合Java管理扩展(JMX)规范的监测工具,JConsole使用Java虚拟机(Java VM),提供在Java平台上运行的应用程序的性能和资源消耗的信息。在Java平台,标准版(Java SE平台)6,JConsole的已经更新到目前的外观,类似于Windows和GNOME桌面(其他平台,将目前标准的J

    2024年02月07日
    浏览(53)
  • 性能测试 —— Tomcat监控与调优:status页监控

    Tomcat服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(Apache Software Foundation)Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。 Tomcat是一个轻量级应用服务器,在中小型系统和并发访问用户的场合下被普遍使用,是开发和

    2024年02月07日
    浏览(42)
  • Tomcat 服务器的内存和连接数调优设置

    Tomcat 是一个广泛使用的 Java Web 应用服务器,为了确保其性能和可靠性,我们可以对其进行一些调优设置,特别是内存和连接数方面的设置。本文将介绍如何通过修改 Tomcat 的配置文件来优化内存和连接数。 调整内存设置: Tomcat 的内存设置涉及到两个参数:初始内存 (Xms) 和

    2024年02月22日
    浏览(37)
  • SpringBoot+内置Tomcat配置,参数调优,最大并发量,最大连接数

    SpringBoot开发最大的好处是简化配置,内置了Tomcat, 在SpringBoot2.0.x版本中内置Tomcat版本是8.5.x,SpringBoot内置Tomcat的默认设置中,Tomcat的等待队列长度默认是100,Tomcat的最小工作线程数默认分配10,Tomcat的最大线程数是200,最大连接数是10000,至于最大并发量和最大连接数,常常理

    2024年02月09日
    浏览(42)
  • IDEA 开发一个简单的 web service 项目,并打包部署到 Tomcat

    通过 IDEA 创建一个简单的 web service 项目 用测试类运行这个 web service 项目 通过 IDEA 把 web service 项目打成 war 包 web service 项目部署到 Tomcat 访问 web service 服务页面 编写一个 web service 客户端(生成 web service 服务代码) 客户端调用 web service 接口 IDEA 创建项目,选择 Java 项目,

    2024年02月15日
    浏览(48)
  • Spring Boot中内置Tomcat最大连接数、线程数与等待数 实践调优

    在 Spring Boot 框架中,我们使用最多的是Tomcat,这是 Spring Boot 默认的容器技术,而且是内嵌式的 Tomcat。Tomcat 是 Apache 基金下的一个轻量级的Servlet 容 器 , 支 持 Servlet 和 JSP 。Tomcat服务器本身具有Web服务器的功能,可以作为独立的Web服务器来使用。 Spring Boot 能支持的最大并发

    2024年02月12日
    浏览(43)
  • Tomcat:org.apache.coyote.http11.Http11Processor.service 解析 HTTP 请求 header 错误

    注意其中:HTTP请求解析错误 将 https 改成 http 即:http://localhost:8080/ (其中8080根据自己配置来更改,tomcat默认是8080) 修改后: 成功!! 具体原因俺也不造,欢迎友友们指教,多谢!! Tomcat与http有协议

    2024年02月11日
    浏览(39)
  • 【分布式技术专题】「分布式技术架构」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)

    Tomcat的总体结构从外到内进行分布,最大范围的服务容器是Server组件,Service服务组件(可以有多个同时存在),Connector(连接器)、Container(容器服务),其他组件:Jasper(Jasper解析)、Naming(命名服务)、Session(会话管理)、Logging(日志管理)、JMX(Java 管理器扩展服务

    2024年01月24日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包