65 2018-10-22 10:15:41 find / -name recovery.dets
66 2018-10-22 10:16:55 cd /var/lib/rabbitmq/mnesia/rabbit@localhost/
67 2018-10-22 10:16:56 ls
68 2018-10-22 10:17:02 \rm recovery.dets
RabbitMQ服務無法啟動問題分析
1.問題再現
重啟rabbitmq服務:service rabbitmq-server restart
輸入該命令后,rabbitmq服務並未啟動。(通過ps命令或rabbitmqctl status命令查看啟動狀態)
2.問題排查
(1)查看startup.err日志文件
1
2
3
4
|
# cat /var/log/rabbitmq/startup_err
Crash dump was written to: erl_crash.dump
init terminating in do_boot()
|
erlang崩潰了,進而導致rabbitmq服務無法正常啟動(需要注意的是rabbitmq是用erlang實現的一個高並發可靠AMQP消息隊列服務器)。
(2)查看rabbit@localhost.log日志
1
|
# cat /var/log/rabbitmq/rabbit@localhost.log
|
有如下錯誤信息片段:
1
2
3
4
5
6
7
8
9
10
11
12
|
……
……
Error description:
{could_not_start,rabbit,
{{badmatch,
{error,
{{{badmatch,
{error,
{not_a_dets_file,
"/var/lib/rabbitmq/mnesia/rabbitmq@localhost/recovery.dets"}}},
……
……
|
rabbitmq無法讀取recovery.dets文件,猜測該文件可能已經損壞。
3.解決方法
根據上述日志,定位到recovery.dets文件,嘗試刪除該文件后再次重啟rabbitmq服務(rabbitmq服務每次啟動會檢查指定目錄下是否存在recovery.dets文件,若無,則會創建一個新的)。
(1)刪除recovery.dets文件
1
|
# rm –rf /var/lib/rabbitmq/mnesia/rabbitmq@localhost/recovery.dets
|
(2)重啟rabbitmq服務
1
|
# service rabbitmq-server restart
|
(3)查看rabbitmq狀態
1
|
# rabbitmqctl status
|
服務正常啟動,問題解決