发送一个1.6MB的消息时客户端的连接断开

emqx版本4.4.6
日志报错:Parse failed for frame_too_large
客户端发送一个1.6MB的消息时客户端的连接断开
我emqx.conf的已经改过了mqtt.max_packet_size = 10MB

你是停机更新的么,
我刚试了下,是可以的啊。
可以把原始的日志贴一下么。

是的,我先停了服务器再修改的配置文件。
日志:
2023-04-07T17:09:23.287719+08:00 [error] Process: <0.1975.0> on node ‘emqx68@172.16.100.68’, Context: maximum heap size reached, Max Heap Size: 10485760, Total Heap Size: 12178177, Kill: true, Error Logger: true, GC Info: [{old_heap_block_size,4298223},{heap_block_size,7880076},{mbuf_size,0},{recent_size,3058985},{stack_size,129},{old_heap_size,0},{heap_size,3581726},{bin_vheap_size,432776},{bin_vheap_block_size,642514},{bin_old_vheap_size,0},{bin_old_vheap_block_size,46422}]

这个不是刚才的错,

  1. 确定你的debug等级不要设置为debug(这个会有一定的影响),保持默认的warning就好。
  2. 在etc/emqx.conf 找到这句:
    zone.external.force_shutdown_policy = 10000|64MB
    把前面的#(注释)去掉,然后重启试试

image
我没有注释这个

我把debug改为warning后,日志就什么都没有了。客户端还是一样的断开

16MB,太小了,他不是你想的那样,你发1M,最大就是1M。
你搞成64M

你没有把emqx 停成功。直接ps,把进程杀掉,再启动吧。

这是什么意思?如果我要发一个10MB的消息,需要怎么设置?

mqtt的设计初衷就不是发送大体积的消息,别再朝这个方向努力了。要做的是就是拆解成小的消息,分开发送。消息那么大,服务器一缓存,岂不是要把内存吃光啦?有那么强劲地服务器吗?

我也遇到相同状况 Parse failed for frame_too_large,
版本 4.3.11 开源版,OS windows10,目前在测试透过 MQTT 发送图片档。

当图片约 0.9 MB 时仍可正常发送,但超过 1MB 时会出现 Parse failed for frame_too_large 错误,
emqx.conf 也改过 mqtt.max_packet_size = 10MB 并重新安装服务(确认有把进程杀掉),
但图片超过 1MB 还是会出现错误。

我还可以修改哪些配置?

日志:
2023-08-10T10:58:29.587000+08:00 [error] 9676$6499cbd8-8c85-4e15-9695-ef133ecb76d9@10.10.65.155:1267 [MQTT] , Parse failed for frame_too_large, [{emqx_frame,parse_remaining_len,5,[{file,“emqx_frame.erl”},{line,177}]},{emqx_connection,parse_incoming,3,[{file,“emqx_connection.erl”},{line,625}]},{emqx_connection,handle_msg,2,[{file,“emqx_connection.erl”},{line,618}]},{emqx_connection,process_msg,2,[{file,“emqx_connection.erl”},{line,364}]},{emqx_connection,handle_recv,3,[{file,“emqx_connection.erl”},{line,328}]},{proc_lib,wake_up,3,[{file,“proc_lib.erl”},{line,236}]}], Frame data:<<48,249…

在配置里面找这个:

Maximum MQTT packet size allowed.

Value: Bytes

Default: 1MB

mqtt.max_packet_size = 1MB

有的
emqx.conf 也改过 mqtt.max_packet_size = 10MB 并重新安装服务(确认有把进程杀掉),
但图片超过 1MB 还是会出现错误。

我还可以修改哪些配置?

还是报: Parse failed for frame_too_large, 么
不应该啊,你运行一下:
./bin/emqx eval “emqx:get_config([mqtt]).”

把结果找找:max_packet_size 是多少。
如果生效了就不应该报frame too large