SpringBoot中优化Undertow性能的方法总结

❃博主首页 : 「码到三十五」 ,同名公众号 :「码到三十五」,wx号 : 「liwu0213」
☠博主专栏 : <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关>
♝博主的话 : 搬的每块砖,皆为峰峦之基;公众号搜索「码到三十五」关注这个爱发技术干货的coder,一起筑基

Undertow是一个采用 Java 开发的灵活的高性能Web服务器,提供包括阻塞和基于NIO的非堵塞机制。Undertow是红帽公司的开源产品.

1. 为什么不进行Tomcat参数调优

有两个方案:进行Tomcat容器调优或者替换为性能更强的容器。可以进行Tomcat调优,但是Undertow容器在性能和内存上都优于Tomcat容器,因此直接选择Undertow容器并进行调优是更好的选择。

2. 在SpringBoot应用中如何优化Undertow性能
2.1. 线程池配置

在SpringBoot应用的application.propertiesapplication.yml中,可以调整Undertow的线程池设置。包括IO线程和工作线程的设置。

  • server.undertow.io-threads:设置IO线程数,负责处理非阻塞的网络IO。通常设置为与CPU核心数相等的值。它们会负责多个连接,不要设置过大,如果过大,启动项目会报错:打开文件数过多
  • server.undertow.worker-threads:阻塞任务线程池, 当执行类似servlet请求阻塞IO操作, undertow会从这个线程池中取得线程,它的值设置取决于系统线程执行任务的阻塞系数,默认值是IO线程数*8
server.undertow.io-threads=8
server.undertow.worker-threads=128
2.2. 缓冲区和内存使用
  • server.undertow.buffer-size:设置每个缓冲区的大小。以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理, 每块buffer的空间大小,越小的空间被利用越充分,不要设置太大,以免影响其他应用,合适即可
  • server.undertow.direct-buffers:是否分配的直接内存(NIO直接分配的堆外内存)
  • server.undertow.buffers-per-region: 每个区分配的buffer数量,所以pool的大小是buffer-size * buffers-per-region

例如:

server.undertow.buffer-size=1024
server.undertow.direct-buffers=true
2.3. 连接和请求超时
  • server.undertow.max-http-post-size:设置HTTP POST请求的最大内容大小,以适应可能的文件上传或大批量数据提交。
  • server.undertow.no-request-timeout:设置连接在不处理请求的情况下闲置的时间。

例如:

server.undertow.max-http-post-size=0 # 不限制大小,或根据实际情况调整
server.undertow.no-request-timeout=1800s # 例如,设置为30分钟
2.4. 禁用无关的设置
  • server.undertow.session-cookie-config:设置会话cookie的配置,可以选择不使用cookie以减少HTTP响应的大小。
  • server.undertow.accesslog.enabled:根据需要启用或禁用访问日志。

例如:

server.undertow.session-cookie-config=none
server.undertow.accesslog.enabled=false
2.5. 编程式配置

通过实现WebServerFactoryCustomizer<UndertowServletWebServerFactory>接口来编程式地配置Undertow,可以更加灵活。

2.6. 启用HTTP/2

通过配置启用Undertow支持的HTTP/2,可以提高网络传输效率。

2.7 示例配置

在SpringBoot项目的application.propertiesapplication.yml中配置:

#  IO线程
server.undertow.io-threads=16
# 工作线程
server.undertow.worker-threads=256
# 缓冲区大小
server.undertow.buffer-size=1024
# 是否分配的直接内存(NIO直接分配的堆外内存)
server.undertow.direct-buffers=true
# 启用HTTP/2
server.undertow.enabled-http2=true

关注公众号[码到三十五]获取更多技术干货 !

评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码到三十五

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值