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}]
这个不是刚才的错,
- 确定你的debug等级不要设置为debug(这个会有一定的影响),保持默认的warning就好。
- 在etc/emqx.conf 找到这句:
zone.external.force_shutdown_policy = 10000|64MB
把前面的#(注释)去掉,然后重启试试
我没有注释这个
我把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