首页 > 解决方案 > RabbitMq 日志填充 {{badmatch,{error,access_refused}},占用磁盘空间

问题描述

我们在繁忙的生产集群中面临一个问题,其中日志文件迅速填满,并在几天内消耗了整个磁盘 (40Gb)。

我们看到的错误是:

=ERROR REPORT==== 19-Jul-2019::12:01:41 ===
** Generic server <0.13892.127> terminating
** Last message in was {'$gen_cast',init}
** When Server state == {state,undefined,undefined,undefined,undefined,
                            {<<"prod1">>,
                             <<"Move from My_Queue_Name">>},
                            dynamic,
                            {shovel,
                                {endpoint,
                                    ["amqp:///prod1"],
                                    #Fun<rabbit_shovel_parameters.4.75090704>},
                                {endpoint,
                                    ["amqp:///prod1"],
                                    #Fun<rabbit_shovel_parameters.5.120532295>},
                                1000,on_confirm,
                                #Fun<rabbit_shovel_parameters.6.48689962>,
                                #Fun<rabbit_shovel_parameters.7.130815760>,
                                <<"My_Queue_Name">>,
                                1,'queue-length'},
                            undefined,undefined,undefined,undefined,undefined}
** Reason for termination == 
** {{badmatch,{error,access_refused}},
    [{rabbit_shovel_worker,make_conn_and_chan,1,[]},
     {rabbit_shovel_worker,handle_cast,2,[]},
     {gen_server2,handle_msg,2,[]},
     {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,240}]}]}

虽然队列名称在大约 10 个不同的队列之间确实有所不同,但我们看到同样的错误一次又一次地注销。

标签: rabbitmq

解决方案


我们在处理该事件时很晚才注意到,铲子参数 ( amqp:///prod1) 中的虚拟主机名称实际上与我们几周前删除的旧虚拟主机有关。

似乎当我们删除这个虚拟主机时,主机内仍然有队列。在内部,这似乎使 RabbitMq 处于不良状态,并且仍然存在一些与“某种”存在的队列相关的挥之不去的铲子配置,我不是 Rabbit 专家,所以假设删除 vhost 不会删除即使您从未在 UI 上看到它们并且它自己也会感到困惑。

这里的解决方案是重新创建同名的虚拟主机,然后我们可以看到并删除所有队列,然后重新删除虚拟主机。这停止了​​错误,并且日志文件不再呈指数增长。


推荐阅读