Springboot内置Tomcat配置参数调优方式

 更新时间:2023年06月26日 09:46:08   作者:优雅de程序员  
这篇文章主要介绍了Springboot内置Tomcat配置参数调优方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Springboot内置Tomcat配置参数调优

Springboot内置Tomcat配置参数调优,首先,线程数是一个重点,每一次HTTP请求到达Web服务器,Web服务器都会创建一个线程来处理该请求,该参数决定了应用服务同时可以处理多少个HTTP请求。

比较重要的有两个:初始线程数和最大线程数。

  • 初始线程数:

保障启动的时候,如果有大量用户访问,能够很稳定的接受请求。最大线程数:用来保证系统的稳定性。

  • 超时时间:

用来保障连接数不容易被压垮。如果大批量的请求过来,延迟比较高,很容易把线程数用光,这时就需要提高超时时间。这种情况在生产中是比较常见的 ,一旦网络不稳定,宁愿丢包也不能把服务器压垮。

  • min-spare-threads:最小备用线程数,tomcat启动时的初始化的线程数,默认10。(适当增大一些,以便应对突然增长的访问量)
  • max-threads:Tomcat可创建的最大的线程数,每一个线程处理一个请求,超过这个请求数后,客户端请求只能排队,等有线程释放才能处理。最大工作线程数,默认200。(4核8g内存,线程数800,一般是核数*200。操作系统做线程之间的切换调度是有系统开销的,所以不是越多越好。)
  • accept-count:当调用Web服务的HTTP请求数达到tomcat的最大线程数时,还有新的HTTP请求到来,这时tomcat会将该请求放在等待队列中,这个acceptCount就是指能够接受的最大等待数,默认100。如果等待队列也被放满了,这个时候再来新的请求就会被tomcat拒绝(connection refused),队列也做缓冲池用,但也不能无限长,不但消耗内存,而且出队入队也消耗CPU。
  • max-connections:这个参数是指在同一时间,tomcat能够接受的最大连接数。一般这个值要大于(max-threads)+(accept-count)。
  • connection-timeout:最长等待时间,如果没有数据进来,等待一段时间后断开连接,释放线程。

在spring boot配置文件中application.yml,添加以下配置:

server:
  tomcat:
    uri-encoding: UTF-8
    #最小线程数
    min-spare-threads: 100
    #最大线程数
    max-threads: 800
    #最大链接数
    max-connections: 10000
    #最大等待队列长度
    accept-count: 500

Tomcat调优常见参数配置

Tomcat 是一个流行的 Web 应用服务器,以下是一些常见的 Tomcat 配置参数:

1.端口配置

  • HTTP 端口:tomcat 默认使用 8080 端口,可以通过修改 server.xml 文件中的 Connector 配置来更改端口号。
  • HTTPS 端口:如果需要启用 HTTPS 协议,需要在 server.xml 中添加 Connector 配置,并指定证书等相关参数。
  • AJP 端口:如果需要与 Apache 或其他 Web 服务器进行集成,可以使用 AJP 协议,在 server.xml 中添加 Connector 配置,并指定 AJP 端口号和协议版本。        

2.日志配置

  • AccessLog:Tomcat 的 AccessLog 组件可以记录每个请求的详细信息,包括请求 URL、响应状态码、访问时间等,可以在 server.xml 中进行配置。
  • Logging:Tomcat 的 Logging 组件可以记录 Tomcat 自身的运行日志,可以在 conf/logging.properties 中进行配置。        

3.连接池配置

  • 最大连接数(maxConnections):指定连接池中的最大连接数。
  • 最小空闲连接数(minIdle):指定连接池中保留的最小空闲连接数。
  • 连接等待超时时间(maxWait):当连接池中的连接数已达最大值时,请求新连接的等待时间。        

4.内存配置

  • JVM 内存参数:指定 Tomcat 使用的 JVM 内存大小,包括初始内存大小(Xms)、最大内存大小(Xmx)、新生代内存大小(XX:NewSize)、Eden 区大小(XX:MaxNewSize)等。
  • PermGen 参数:PermGen 是 JVM 中用于存放类信息、字符串常量等的区域,可以通过 -XX:PermSize 和 -XX:MaxPermSize 参数来指定 PermGen 的大小。        

5.虚拟主机配置

  • Host 配置:在 server.xml 中配置多个 Host 可以实现虚拟主机的配置,每个 Host 对应一个独立的 Web 应用,可以拥有自己的域名、文档根目录等属性。
  • Context 配置:在每个 Host 中可以配置多个 Context,每个 Context 对应一个独立的 Web 应用,可以拥有自己的 Web 应用名称、上下文路径、文档根目录等属性。        

6.安全配置

  • 用户认证(Authentication):Tomcat 支持多种用户认证方式,包括基于表单、基于 LDAP、基于 JASPI 等。
  • SSL 配置:通过在 server.xml 中配置 SSL 相关参数,可以启用 HTTPS 协议,并配置证书等相关信息。
  • 访问控制(Access Control):Tomcat 提供了基于 IP、基于 URL 等多种访问控制方式,可以在 web.xml 中进行配置。        

7.JSP/Servlet 配置

  • JSP 编译参数:可以在 web.xml 中配置 JSP 编译参数,包括是否开启 JSP 编译缓存、是否开启 JSP 自动重新编译等。
  • Servlet 配置:可以在 web.xml 中配置 Servlet 相关参数,包括 Servlet 类名、URL 映射、初始化参数等。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 利用Maven实现将代码打包成第三方公共jar包

    利用Maven实现将代码打包成第三方公共jar包

    在项目开发过程中,我们经常需要将一些公共方法提取出来,然后单独封装成一个第三方公共jar包,采用普通的方式打包后的jar,依赖的工程执行编译时,却提示找不到对应的依赖包,那么如何将工程打包为可执行jar包呢?下面向大家分享三种方法
    2022-10-10
  • java实现web实时消息推送的七种方案

    java实现web实时消息推送的七种方案

    这篇文章主要为大家介绍了java实现web实时消息推送的七种方案示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Javaweb resin4如何配置端口虚拟目录

    Javaweb resin4如何配置端口虚拟目录

    这篇文章主要介绍了Javaweb resin4如何配置端口虚拟目录,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • SpringBoot Controller Post接口单元测试示例

    SpringBoot Controller Post接口单元测试示例

    今天小编就为大家分享一篇关于SpringBoot Controller Post接口单元测试示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Java中泛型使用的简单方法介绍

    Java中泛型使用的简单方法介绍

    这篇文章主要给大家介绍了关于Java中泛型使用的简单方法,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • Java中字符编码格式详解

    Java中字符编码格式详解

    在java应用软件中,会有多处涉及到字符集编码,有些地方需要进行正确的设置,有些地方需要进行一定程度的处理。本文主要给大家讲解java中字符的编码格式等相关问题
    2016-03-03
  • SpringBoot中如何启动Tomcat流程

    SpringBoot中如何启动Tomcat流程

    这篇文章主要介绍了SpringBoot中如何启动Tomcat流程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • 浅谈mybatisPlus的Ipage分页和map参数的问题

    浅谈mybatisPlus的Ipage分页和map参数的问题

    这篇文章主要介绍了mybatisPlus的Ipage分页和map参数的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • SpringBoot实现子类的反序列化示例代码

    SpringBoot实现子类的反序列化示例代码

    这篇文章主要给大家介绍了关于SpringBoot实现子类的反序列化的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用SpringBoot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • Java中抽象类与方法的重写方式

    Java中抽象类与方法的重写方式

    这篇文章主要介绍了Java中抽象类与方法的重写方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02

最新评论