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 映射、初始化参数等。

总结

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

相关文章

  • Java纯代码实现导出pdf

    Java纯代码实现导出pdf

    在项目开发中,产品的需求越来越奇葩啦,开始文件下载都是下载为excel的,做着做着需求竟然变了,要求能导出pdf,所以本文就来用Java实现导出pdf功能吧
    2023-12-12
  • 深入理解Java中的并发工具类CountDownLatch

    深入理解Java中的并发工具类CountDownLatch

    CountDownLatch 作为 Java 中的一个同步工具类,用于在多线程间实现协调和控制,本文主要来和大家讲解一下JUC 工具类 CountDownLatch的使用,需要的可以参考一下
    2023-07-07
  • java调用通义千问API的详细完整步骤

    java调用通义千问API的详细完整步骤

    通义千问是阿里云自主研发的大语言模型,能够在用户自然语言输入的基础上,通过自然语言理解和语义分析,理解用户意图,在不同领域、任务内为用户提供服务和帮助,下面这篇文章主要给大家介绍了关于java调用通义千问API的详细完整步骤,需要的朋友可以参考下
    2024-02-02
  • Java设计模式之抽象工厂模式简析

    Java设计模式之抽象工厂模式简析

    这篇文章主要介绍了Java设计模式之抽象工厂模式简析, 抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象,他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构,需要的朋友可以参考下
    2023-12-12
  • 用C++实现求N!中末尾0的个数的方法详解

    用C++实现求N!中末尾0的个数的方法详解

    这篇文章主要介绍了用C++实现求N!中末尾0的个数的方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • MybatisPlus实现逻辑删除功能

    MybatisPlus实现逻辑删除功能

    这篇文章主要介绍了MybatisPlus实现逻辑删除功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 导致MyEclipse内存不足的原因分析及解决办法

    导致MyEclipse内存不足的原因分析及解决办法

    这篇文章主要介绍了导致MyEclipse内存不足的原因分析及解决办法的相关资料,需要的朋友可以参考下
    2016-01-01
  • java读取csv文件示例分享(java解析csv文件)

    java读取csv文件示例分享(java解析csv文件)

    这篇文章主要介绍了java读取csv文件示例,这个java解析csv文件的例子很简单,下面直接上代码,大家参考使用吧
    2014-03-03
  • play for scala 实现SessionFilter 过滤未登录用户跳转到登录页面

    play for scala 实现SessionFilter 过滤未登录用户跳转到登录页面

    这篇文章主要介绍了play for scala 实现SessionFilter 过滤未登录用户跳转到登录页面的相关资料,需要的朋友可以参考下
    2016-11-11
  • 解释:int型默认值为0的问题

    解释:int型默认值为0的问题

    这篇文章主要介绍了解释:int型默认值为0的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08

最新评论