Tomcat - Springboot启动的时候初始化的线程池默认配置

之前有个项目上的同事突然问我,我们XX服务最大的并发量是多少,因为我们使用的是springboot来运行的服务,配置文件中也没有配置其他的参数,应该就是使用默认的tomcat的线程配置了;因此整理了一下:

server:
    port: 12021
    tomcat:
      uri-encoding: UTF-8
      max-threads: 8           #最大并发数,最佳线程数目 = ((线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目,1、CPU密集型:操作内存处理的业务,一般线程数设置为:CPU核数 + 1 或者 CPU核数*2。核数为4的话,一般设置 5 或 8 。 2、IO密集型:文件操作,网络操作,数据库操作,一般线程设置为:cpu核数 / (1-0.9),核数为4的话,一般设置 40
      max-connections: 20000   #接受和处理的最大连接数
      min-SpareThreads: 20     #初始化时创建的线程数
      acceptCount: 700         #可以放到处理队列中的请求数

最佳线程数目 = ((线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目,

1、CPU密集型:操作内存处理的业务,一般线程数设置为:CPU核数 + 1 或者 CPU核数*2。核数为4的话,一般设置 5 或 8 。

2、IO密集型:文件操作,网络操作,数据库操作,一般线程设置为:cpu核数 / (1-0.9),核数为4的话,一般设置 40 

maxThreads="8"  //最大并发数 
minSpareThreads="100"///初始化时创建的线程数
maxSpareThreads="500"///一旦创建的线程超过这个值,Tomcat就会关闭不再需要的socket线程。
acceptCount="700"// 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理

maxThreads 客户请求最大线程数 
minSpareThreads Tomcat初始化时创建的 socket 线程数 
maxSpareThreads Tomcat连接器的最大空闲 socket 线程数 
enableLookups 若设为true, 则支持域名解析,可把 ip 地址解析为主机名 
redirectPort 在需要基于安全通道的场合,把客户请求转发到基于SSL 的 redirectPort 端口 
acceptAccount 监听端口队列最大数,满了之后客户请求会被拒绝(不能小于maxSpareThreads ) 
connectionTimeout 连接超时 
minProcessors 服务器创建时的最小处理线程数 
maxProcessors 服务器同时最大处理线程数 
URIEncoding URL统一编码

maxThreads:处理的最大并发请求数,默认值200
minSpareThreads:最小线程数始终保持运行,默认值10
maxConnections:在给定时间接受和处理的最大连接数,默认值10000
参考文献:http://tomcat.apache.org/tomcat-8.0-doc/config/http.html#HTTP/1.1_and_HTTP/1.0_Support

微信公众号,搜索:zhangdaopin,也可方便快捷的查看本人的博客哦,谢谢~

<think>好的,我现在需要介绍如何在Spring Boot中配置Undertow作为嵌入式服务器启动。首先,我得回想一下Spring Boot支持的服务器类型,默认Tomcat,但也可以替换成Jetty或Undertow。Undertow是一个高性能的非阻塞服务器,由JBoss开发,特点是轻量且模块化。 接下来,用户可能需要知道如何替换Tomcat为Undertow。首先想到的是在Maven或Gradle中添加依赖,并排除Tomcat默认依赖。对于Maven项目,应该在pom.xml中排除spring-boot-starter-tomcat,然后添加spring-boot-starter-undertow。这一步需要注意依赖的版本是否与Spring Boot兼容,不过通常Spring Boot会管理好版本,所以用户只需引入starter即可。 然后,可能需要配置Undertow的参数,比如端口、缓冲区大小、工作线程等。这些配置通常在application.properties或application.yml中进行。例如,设置server.port来更改端口,或者使用server.undertow开头的配置项调整Undertow特有的参数,比如最大HTTP post大小、线程池设置等。需要确认这些配置项的正确性,可能需要查阅Spring Boot的官方文档,确保参数名称正确。 另外,用户可能会关心如何通过编程方式配置Undertow,比如自定义UndertowBuilderCustomizer来调整更底层的设置,比如添加监听器、配置SSL等。这时候需要创建一个配置类,并注册一个UndertowServletWebServerFactory的Bean,并添加自定义的BuilderCustomizer。 还要注意,Undertow的一些高级特性,比如HTTP/2支持,可能需要额外的配置,比如SSL证书。这时候需要配置SSL相关的属性,并确保Undertow的选项开启。 可能遇到的问题包括依赖冲突,比如未正确排除Tomcat导致启动失败,或者配置参数拼写错误导致不生效。这时候需要检查依赖树,并确认配置项是否正确。 最后,可以提及一些性能调优的建议,比如根据应用负载调整线程池参数,或者启用直接内存缓冲区以减少GC压力。同时,提醒用户测试配置变更后的应用表现,确保稳定性和性能提升。</think>以下是在Spring Boot中配置Undertow作为嵌入式服务器的分步指南: --- ### 一、为什么选择Undertow? 1. **高性能**:基于NIO的非阻塞式架构 2. **低内存消耗**:核心库仅需不到4MB 3. **灵活配置**:支持HTTP/2、WebSocket等协议 4. **模块化设计**:可按需启用功能组件 --- ### 二、基础配置步骤 #### 1. 添加Maven依赖 ```xml <!-- 排除默认Tomcat --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <!-- 添加Undertow依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-undertow</artifactId> </dependency> ``` #### 2. 基本参数配置(application.yml) ```yaml server: port: 8080 undertow: # 工作线程配置 threads: io: 4 # I/O线程数(建议等于CPU核心数) worker: 64 # 工作线程数(建议= CPU核心数 * 8) # 缓冲区配置 buffer-size: 1024 direct-buffers: true ``` --- ### 三、高级配置示例 #### 1. 调整性能参数 ```yaml server: undertow: max-http-post-size: 10MB # 连接超时设置 no-request-timeout: 60000 # 最大并发连接数 max-connections: 1000 ``` #### 2. 自定义配置类(Java Config) ```java @Configuration public class UndertowConfig { @Bean public UndertowServletWebServerFactory servletWebServerFactory() { UndertowServletWebServerFactory factory = new UndertowServletWebServerFactory(); factory.addBuilderCustomizers(this::customizeBuilder); return factory; } private void customizeBuilder(Undertow.Builder builder) { // 添加HTTP监听端口 builder.addHttpListener(8081, "0.0.0.0"); // 配置内存管理 builder.setBufferSize(1024 * 16) .setIoThreads(Runtime.getRuntime().availableProcessors()) .setWorkerThreads(200); } } ``` --- ### 四、重要配置参数说明 | 参数路径 | 默认值 | 说明 | |------------------------------|---------|-------------------------------| | `server.undertow.io-threads` | CPU核心数 | I/O线程数 | | `server.undertow.worker-threads` | CPU核心数*8 | 工作线程池大小 | | `server.undertow.direct-buffers` | true | 使用直接内存缓冲区 | | `server.undertow.buffer-size` | 1024 | 每个缓冲区大小(字节) | | `server.undertow.eager-filter-init` | true | 立即初始化Filter | --- ### 五、启动验证 1. 观察启动日志: ``` INFO o.s.b.w.e.u.UndertowServletWebServer - Undertow started on port(s) 8080 (http) ``` 2. 访问端点验证服务可用性 --- ### 六、性能调优建议 1. **线程配置**:根据压测结果调整io/worker线程数 2. **开启GZIP压缩**:减少网络传输量 ```yaml server: compression: enabled: true mime-types: text/html,text/xml,text/plain,text/css,text/javascript,application/javascript min-response-size: 1024 ``` 3. **启用HTTP/2**(需配合SSL证书) ```yaml server: http2: enabled: true ssl: key-store: classpath:keystore.p12 key-store-password: secret key-store-type: PKCS12 ``` --- ### 七、常见问题排查 1. **依赖冲突**:确保完全排除Tomcat依赖 2. **内存不足**:调整JVM参数 `-XX:MaxDirectMemorySize` 3. **启动失败**:检查端口占用情况 4. **配置未生效**:确认配置项前缀为`server.undertow` 通过以上配置,即可充分利用Undertow的高性能特性。建议通过压力测试工具(如JMeter)验证配置效果。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值