我使用2000台client来同时连接emqx企业版(单节点未license),然后我通过webhooks来。2000台每1秒就上传一条数据,2000台都是用相同的topic发布。在测试的时候就出现webhooks断联的情况。报警信息和webhooks的配置信息见图片
从现有告警看,首先断的是 Webhook 的 HTTP 资源,不是 MQTT 客户端本身:连接器健康检查超时后进入 disconnected,转发动作报 resource_health_check_timed_out。截图同时显示节点内存使用率约 74.96%。先补这几项,才能判断是下游 HTTP 服务处理不过来、网络/代理问题,还是 EMQX 节点资源不足:
- EMQX 完整版本号、部署方式(Docker/K8s/安装包)以及节点 CPU/内存配置;
- Webhook 目标 URL(域名/IP 和端口可打码)及截图所示告警时间段内目标服务的访问日志:HTTP 状态码、响应耗时、连接数/线程池、限流或 5xx;
- EMQX 日志中
data_forward_A_WH_D、channel_health_check_timed_out前后的完整错误信息,并在 EMQX 节点执行curl -v验证目标地址是否稳定可达; - Dashboard 里该 Webhook 的实际配置:连接池大小、HTTP 管道、请求飞行队列窗口、请求/连接超时、是否启用 TLS。
截图里的连接池、HTTP 管道和请求飞行队列窗口都设成了20000。(最佳实践是设置为 cpu core 数,最多就设置为 2*cpu core, 再大就是负作用了) 先不要继续盲目放大这些并发参数:你这里约 2000 条消息/秒,真正能承受的并发应按下游 HTTP 服务的处理能力和响应时间计算;目标服务未能稳定返回 2xx 时,继续增大连接池只会把排队和内存压力放大。请求模式已是异步,飞行队列窗口只控制在途请求数,不会提升下游服务吞吐。先确认目标服务稳定、节点内存不再上涨,再逐步压测调整。
参考:Webhook、数据集成通用特性。


