-
现象描述:
rabbitmq日志曾提示:
Free disk space is insufficient. Free bytes: 499813. Limit: 50000000
Publishers will be blocked until this alarm clears
重启mq后提示:
=ERROR REPORT==== 10-Nov-2021::23:17:31 ===
** Generic server <0.197.0> terminating
** Last message in was {'$gen_cast',
{submit_async,
#Fun<rabbit_queue_index.32.15142149>}}
** When Server state == undefined
** Reason for termination ==
** {function_clause,
[{rabbit_queue_index,parse_segment_entries,
2.分析及解决
rabbitmq默认剩余空间限制为50M,即不配置disk_free_limit时,当队列所在系统分区磁盘空间不足50M时,消息发布被禁止,防止磁盘空间写满后造成部分写入,重启会导致无法启动。
在实际使用过程中,50M的限制往往无法及时发现磁盘空间满(rabbitmq在未到达限制时每10秒检查一次),尤其当有其他应用或服务快速写文件占用空间时,等rabbitmq检测到时,磁盘空间可能已满,这样会造成写入持久化队列的消息不完全,重启时就会导致无法启动。
/etc/rabbitmq/rabbitmq.config中增加:
{disk_free_limit, 1000000000},
如下示例:
[
{rabbit,[
{tcp_listeners, [5672]},
{ssl_listeners, [5671]},
{handshake_timeout, 60000},
{ssl_handshake_timeout, 60000},
{ssl_options, [{cacertfile, "/usr/local/Server/cacert.pem"},
{certfile, "/usr/local/Server/Server-cert.pem"},
{keyfile, "/usr/local/Server/Server-key.pem"},
{verify, verify_peer},
{fail_if_no_peer_cert, false}]},
{disk_free_limit, 1000000000},
{vm_memory_high_watermark_paging_ratio, 0.75},
{vm_memory_high_watermark, 0.8}
]}
].
3.6.15版本已验证