1. 为什么不进行tomcat参数调优
有两个方案:进行tomcat容器调优或者替换为性能更强的容器。可以进行tomcat调优,但是undertow容器在性能和内存上都优于tomcat容器,因此直接选择undertow容器并进行调优是更好的选择。
2. 在springboot应用中如何优化undertow性能
2.1. 线程池配置
在springboot应用的application.properties
或application.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.properties
或application.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性能内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论