在dashboard上可以看到,used每个节点占用在12G左右,但是total的占比在20G左右,是不是有内存泄漏或者其他的问题产生?
当total达到服务器内存上线,EMQX就会内存撑爆
EMQX 4.2版本,暂时没法升级版本
Erlang内存分配器的策略: BEAM有自己的内存分配器(如erts_alloc
)。这些分配器为了效率,可能会向操作系统申请比当前实际需求更大的内存块(carriers),然后自己管理这些内存块的分配和回收。这意味着即使Erlang内部释放了一些内存,分配器持有的这些内存块在操作系统层面看来仍然是被该进程占用的,直到分配器决定将整个carrier归还给操作系统。
在我实际观测中,连接数稳定的情况下:总内存一直在平均水平正负 2G 内都是正常的。属于正常波动。
PS: Erlang VM本身也有一些内存相关的限制参数(例如通过+MMsco
+MMscs
+MBas
+MBsco
+MBscs
等参数调整分配器行为和限制),但这些主要是指导BEAM内部如何管理内存,而不是硬性阻止它向OS申请更多内存。如果应用逻辑持续请求内存,VM会尽力满足,直到OS层面无法提供为止。如果没有影响到你的业务,最好不要去调。
这个不是 bug,升级了也解决不了,不需要升级。
服务器资源是4cpu 32G的,半个月之前单个节点在35w左右的会话,total稳定在14G左右,但是重启之后total就到了20G,且还在持续增长,这半个多月已经重启了2次集群,因为重启5-6天之后,内存就持续增长到85%以上了,内存会被撑爆
重启完之后,内存持续增长,会话数还没有恢复到之前的量,内存就已经快满了
那确实是有问题了,可以找日志看看有什么报错或者告警没
日志级别是warning的,大部分的信息都是这个,丢弃Qos为0的消息,或者是断开连接,还有其他方法可以排查吗?
2025-05-08 10:52:59.420 [error] <<“C068CCF808382245UrbK0//videocall”>>@120.42.141.219:2728 [Channel] Unexpected sock_closed: closed
2025-05-08 10:53:01.896 [error] <<“80128278//1672023558282412033//pai_app_push”>>@119.39.41.35:39029 [Channel] Unexpected sock_closed: ssl_closed
2025-05-08 10:53:02.439 [error] <<“16913654//1484053577814114306//pai_app_push”>>@60.27.159.121:17831 [Channel] Unexpected sock_closed: ssl_closed
2025-05-08 10:53:03.879 [error] <<“22525034//1693578890265808897//pai_app_push”>>@39.144.229.207:52107 [Channel] Unexpected sock_closed: ssl_closed
2025-05-08 10:53:04.039 [error] <<“62421390//1833397431397187586//pai_app_push”>>@222.244.111.195:58699 [Channel] Unexpected sock_closed: ssl_closed
2025-05-08 10:53:04.383 [warning] <<“96125470//1883324043192582146//pai_app_push”>>@39.149.88.207:55096 [Session] Dropped qos0 msg: Message(Id=4òÚt6
5-, QoS=0, Topic=/sdt/down/app/iot/data/2b119e17b14aec4c/0337933000124520000001_0001/properties, From=<<"AppPush--skymobile--0--skyworth-app-push-78d9bc4548-rxh8c/172.16.1.179--0">>, Flags=[], Headers=#{peerhost => {172,16,1,179}, properties => #{},proto_ver => 4,protocol => mqtt, username => <<"skyworth">>}) 2025-05-08 10:53:04.399 [warning] <<"96125470//1883324043192582146//pai_app_push">>@39.149.88.207:55096 [Session] Dropped qos0 msg: Message(Id=4òÚRõt6
5., QoS=0, Topic=/sdt/down/app/iot/data/fe4d1ef7dd54971a/0337933000124520000001/properties, From=<<“AppPush–skymobile–0–skyworth-app-push-78d9bc4548-rxh8c/172.16.1.179–0”>>, Flags=, Headers=#{peerhost => {172,16,1,179},
properties => #{},proto_ver => 4,protocol => mqtt,
username => <<“skyworth”>>})
2025-05-08 10:53:04.415 [warning] <<“96125470//1883324043192582146//pai_app_push”>>@39.149.88.207:55096 [Session] Dropped qos0 msg: Message(Id=4òÚ Wu@, QoS=0, Topic=/sdt/down/app/iot/data/2b119e17b14aec4c/0337933000124520000001_0001/properties, From=<<“AppPush–skymobile–0–skyworth-app-push-78d9bc4548-ggzpj/172.16.3.87–0”>>, Flags=, Headers=#{peerhost => {172,16,3,87},
properties => #{},proto_ver => 4,protocol => mqtt,
username => <<“skyworth”>>})
2025-05-08 10:53:04.435 [warning] <<“96125470//1883324043192582146//pai_app_push”>>@39.149.88.207:55096 [Session] Dropped qos0 msg: Message(Id=4òÚÛxt
º, QoS=0, Topic=/sdt/down/app/iot/data/fe4d1ef7dd54971a/0337933000124520000001/properties, From=<<“AppPush–skymobile–0–skyworth-app-push-78d9bc4548-7jwpq/172.16.2.48–0”>>, Flags=, Headers=#{peerhost => {172,16,2,48},
properties => #{},proto_ver => 4,protocol => mqtt,
username => <<“skyworth”>>})
2025-05-08 10:53:04.461 [warning] <<“96125470//1883324043192582146//pai_app_push”>>@39.149.88.207:55096 [Session] Dropped qos0 msg: Message(Id=4òÛA&t
», QoS=0, Topic=/sdt/down/app/iot/data/2b119e17b14aec4c/0337933000124520000001_0001/properties, From=<<“AppPush–skymobile–0–skyworth-app-push-78d9bc4548-7jwpq/172.16.2.48–0”>>, Flags=, Headers=#{peerhost => {172,16,2,48},
properties => #{},proto_ver => 4,protocol => mqtt,
username => <<“skyworth”>>})
2025-05-08 10:53:04.485 [warning] <<“96125470//1883324043192582146//pai_app_push”>>@39.149.88.207:55096 [Session] Dropped qos0 msg: Message(Id=4òÛ¢ìt6
`5/, QoS=0, Topic=/sdt/down/app/iot/data/fe4d1ef7dd54971a/0337933000124520000001/properties, From=<<“AppPush–skymobile–0–skyworth-app-push-78d9bc4548-rxh8c/172.16.1.179–0”>>, Flags=, Headers=#{peerhost => {172,16,1,179},
properties => #{},proto_ver => 4,protocol => mqtt,
username => <<“skyworth”>>})
2025-05-08 10:53:04.707 [error] <<“71145058//1919385681375731714//pai_app_push”>>@121.239.200.70:32412 [Channel] Unexpected sock_closed: ssl_closed
2025-05-08 10:53:06.609 [error] <<“96692798//1641728089765834754//pai_app_push”>>@223.104.150.19:20935 [Channel] Unexpected sock_closed: ssl_closed
2025-05-08 10:53:06.925 [error] <<“85914106//1877321611912564738//pai_app_push”>>@112.224.17.47:39664 [Channel] Unexpected sock_closed: ssl_closed
2025-05-08 10:53:08.035 [error] <<“15593647//1546026567921045505//pai_app_push”>>@39.144.155.65:9539 [Channel] Unexpected sock_closed: ssl_closed
2025-05-08 10:53:10.453 [error] <<“81306420//1821009924659245057//pai_app_push”>>@117.136.80.93:21094 [Channel] Unexpected sock_closed: ssl_closed
2025-05-08 10:53:11.910 [error] <<“55260186//1914330422432272385//pai_app_push”>>@112.97.47.151:50137 [Channel] Unexpected sock_closed: ssl_closed
日志看起来都不是什么大问题。这个版本太老了,用来调试工具都没有。
如果实在不能升级,可以直接联系 EMQX 专家 1v1 支持