44 lines
2.8 KiB
Markdown
44 lines
2.8 KiB
Markdown
# v4.4.17
|
||
|
||
## 增强
|
||
|
||
- 启用了 `Proxy Protocol` 的监听器在收到 TCP 端口探测时,不再打印错误日志 [emqx/esockd#172](https://github.com/emqx/esockd/pull/172)。
|
||
修复前,如果监听器已启用了代理协议 (`listener.tcp.external.proxy_protocol = on`),
|
||
但连接在 TCP 握手完成之后、收到代理信息之前就被断开了,则会打印下面一行错误日志:
|
||
```
|
||
[error] supervisor: 'esockd_connection_sup - <0.3265.0>', errorContext: connection_shutdown, reason: {recv_proxy_info_error,tcp_closed}, offender:
|
||
```
|
||
此修复之后不再打印任何日志,但仍然可以通过 `emqx_ctl listeners` 命令来查看错误原因的统计。
|
||
|
||
- 改进监听器出现文件描述符耗尽错误时的日志 [emqx/esockd#173](https://github.com/emqx/esockd/pull/173)。
|
||
之前的错误日志为:
|
||
```
|
||
[error] Accept error on 0.0.0.0:1883: emfile
|
||
```
|
||
现在改为:
|
||
```
|
||
[error] Accept error on 0.0.0.0:1883: EMFILE (Too many open files)
|
||
```
|
||
|
||
- 提升规则引擎在规则数量较多时的执行性能 [#10283](https://github.com/emqx/emqx/pull/10283)
|
||
在此改动之前,当规则数量比较多的时候,规则引擎的执行会成为瓶颈,规则引擎将耗费大量 CPU 在规则的查询和匹配上。
|
||
本次优化中,通过简单地给规则列表添加一个缓存,大幅提升了此场景下的规则执行效率。
|
||
在我们的测试中,在一个 32 核 32G 的虚拟机上,我们创建了 700 条不执行任何动作的规则(绑定了 "do_nothing" 调试动作),
|
||
并以 1000 条每秒的速度向 EMQX 发送 MQTT 消息(即,规则触发频率为 700 * 1000 次每秒),
|
||
在应用此优化后,规则引擎的 CPU 使用率下降到了原来的 55% ~ 60%。
|
||
|
||
## 修复
|
||
|
||
- 修复 `Erlang distribution` 无法使用 TLS 的问题 [#9981](https://github.com/emqx/emqx/pull/9981)。
|
||
关于 `Erlang distribution`, 详见 [这里](https://www.emqx.io/docs/zh/v4.4/advanced/cluster.html)。
|
||
|
||
- 修正了 MQTT 桥接 TLS 连接无法验证对端的带通配符的证书 [#10094](https://github.com/emqx/emqx/pull/10094)。
|
||
|
||
- 修复 EMQX 由于大量 retain 消息而无法及时清除已掉线的 MQTT 连接信息的问题。[#10189](https://github.com/emqx/emqx/pull/10189)。
|
||
在此修复之前,`emqx_retainer` 插件和 EMQX 的连接信息清理过程共用了同一个进程池,因此,
|
||
如果该进程池被大量的 retain 消息下发任务阻塞时,许多已经掉线的 MQTT 连接将得不到及时清理。
|
||
详见 [#9409](https://github.com/emqx/emqx/issues/9409)。
|
||
此修复中,我们为 `emqx_retainer` 插件创建了单独的进程池,从而避免了该问题。
|
||
|
||
- 修复了 Helm Chart 中模板文件路径的错误。[#10229](https://github.com/emqx/emqx/pull/10229)
|