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

 更新时间:2024年08月28日 09:11:07   作者:码到三十五  
Undertow是一个采用 Java 开发的灵活的高性能Web服务器,提供包括阻塞和基于NIO的非堵塞机制,本文将给大家介绍SpringBoot中优化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

到此这篇关于SpringBoot中优化Undertow性能的方法总结的文章就介绍到这了,更多相关SpringBoot优化Undertow性能内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JAVA面试题之Forward与Redirect的区别详解

    JAVA面试题之Forward与Redirect的区别详解

    这篇文章主要给大家介绍了在JAVA面试中可能遇到会遇到的一道题,就是java中Forward与Redirect两者之前的区别,文中介绍的非常详细,对大家具有一定参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • Mybatis中isNotNull与isNotEmpty的使用心得

    Mybatis中isNotNull与isNotEmpty的使用心得

    这篇文章主要介绍了Mybatis中isNotNull与isNotEmpty的使用心得,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • mybatisPlus返回Map类型的集合

    mybatisPlus返回Map类型的集合

    本文主要介绍了mybatisPlus返回Map类型的集合,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • java实现处理对象不为空则返回,为空则继续

    java实现处理对象不为空则返回,为空则继续

    在Java中有多种方法可以处理对象不为空则返回,为空则继续的逻辑,本文为大家整理了几种常见的实现方式,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2025-12-12
  • 详解openfeign集成spring cloud loadbalancer实现负载均衡流程

    详解openfeign集成spring cloud loadbalancer实现负载均衡流程

    这篇文章主要介绍了openfeign集成spring cloud loadbalancer实现负载均衡流程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • 一键清除maven仓库中下载失败的jar包的实现方法

    一键清除maven仓库中下载失败的jar包的实现方法

    这篇文章主要介绍了一键清除maven仓库中下载失败的jar包的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • windows 部署JAVA环境安装iDea的详细步骤

    windows 部署JAVA环境安装iDea的详细步骤

    这篇文章主要介绍了windows 部署JAVA环境安装iDea的详细步骤,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Java中通过ZipOutputStream类如何将多个文件打成zip

    Java中通过ZipOutputStream类如何将多个文件打成zip

    ZipOutputStream 是Java中用于创建ZIP文件的类,它是 java.util.zip 包中的一部分,通过使用 ZipOutputStream ,可以将多个文件压缩到一个ZIP文件中,这篇文章主要介绍了Java中(ZipOutputStream)如何将多个文件打成zip,需要的朋友可以参考下
    2023-09-09
  • intelliJ IDEA 多行选中相同内容的快捷键分享

    intelliJ IDEA 多行选中相同内容的快捷键分享

    这篇文章主要介绍了intelliJ IDEA 多行选中相同内容的快捷键分享,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • 用Java实现希尔排序的示例

    用Java实现希尔排序的示例

    问题:现有一段程序S,可以对任意n个数进行排序。如果现在需要对n^2个数进行排序,最少需要调用S多少次?只允许调用S,不可以做别的操作。我们用希尔排序来做解决这个
    2013-11-11

最新评论