我们很高兴地宣布发布 netty 4.1.75.Final。此版本是一个错误修复版本,但还包含两个可能会更改应用程序的内存使用/性能特征的更改。请确保阅读下面的重要说明部分。
最重要的变化是:
- 制作域套接字地址时避免读取未初始化的内存(#12085)
- HTTP/2 标头验证必须拒绝重复的伪标头 ( #12094 )
- 添加特定于 HTTP 的 TooLongFrameExceptions ( #12084 )
- 允许在创建时将其他元数据附加到 ResourceLeakTrackers ( #12091 )
- 添加 PlatformDependent.estimateMaxDirectMemory ( #12118 )
- 将默认 PooledByteBufAllocator 块大小从 16 MiB 减少到 4 MiB ( #12108 )
- 修复了使用 spliceTo() 时的高 CPU 使用率 ( #12138 )
- 将 io.netty.allocator.useCacheForAllThreads 的默认值更改为 false ( #12109 )
- 允许在 SNI 标头中设置更宽松的字符 ( #12147 )
- 在 ReferenceCountedOpenSslEngine 中处理委派任务时修复竞争 ( #12149 )
有关详细信息和所有更改,请浏览我们的问题跟踪器以获取4.1.75.Final。
重要笔记
将默认 PooledByteBufAllocator 块大小从 16 MiB 减少到 4 MiB
为了减少内存开销,PooledByteBufAllocator
我们决定将默认块大小从 16 MiB 更改为 4 MiB。一般来说,这对几乎所有用户的性能不会有任何不良影响。如果您发现用例的性能下降,请打开一个问题并考虑按照 ( #12108 ) 中的说明更改配置。
将 io.netty.allocator.useCacheForAllThreads 的默认值更改为 false
Netty 在分配缓冲区时使用各种类型的缓存来提高性能,其中基于线程本地。虽然基于线程本地的缓存通常可以减少压缩,但当应用程序从许多不同的线程分配缓冲区时,它也可以使用大量内存。为了降低最终导致大量内存使用而没有太多收益的风险,我们决定更改何时使用这些缓存的默认配置。从这个版本开始,我们将只使用这种类型的缓存,如果它被配置为总是使用缓存,分配Thread
是类型FastThreadLocalThread
或者如果Thread
绑定到一个EventExecutor
. 一般来说,这应该足够好,同时大大减少了内存开销。如果您发现任何问题,请考虑打开问题并更改配置,如 (#12109).