前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot中优化Undertow性能的方法总结

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

作者头像
公众号:码到三十五
发布2024-09-05 10:37:44
980
发布2024-09-05 10:37:44
举报
文章被收录于专栏:设计模式

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
代码语言:javascript
复制
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

例如:

代码语言:javascript
复制
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:设置连接在不处理请求的情况下闲置的时间。

例如:

代码语言:javascript
复制
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:根据需要启用或禁用访问日志。

例如:

代码语言:javascript
复制
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中配置:

代码语言:javascript
复制
#  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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2. 在SpringBoot应用中如何优化Undertow性能
    • 2.1. 线程池配置
      • 2.2. 缓冲区和内存使用
        • 2.3. 连接和请求超时
          • 2.4. 禁用无关的设置
            • 2.5. 编程式配置
              • 2.6. 启用HTTP/2
                • 2.7 示例配置
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档