记一次erlang语言bug导致rabbitmq的队列没有消费者的问题
公司开发和测试环境采用的erlang版本是19.0.3,rabbitmq版本为3.6.10。集群条件下稳定使用了近一年时间,没什么问题。
为了保持和线下一致,线上生产环境采用了相同的版本,运行几个月后,出现问题。现象如下:
在几天时间内,有三个队列出现没有消费者的问题。查看rabbitmq的日志。
operation queue.declare caused a channel exception not_found: failed to perform operation on queue '出现问题的队列' in vhost '/' due to timeout
根据https://bugzilla.redhat.com/show_bug.cgi?id=1418668,这个bug在3.6.3已经修复,单我们还是有问题。
此时,通过管理页面,无法删除队列,报错类似,是queue.delete超时。根据https://github.com/rabbitmq/rabbitmq-server/issues/1333的反馈
通过命令
rabbitmqctl eval 'rabbit_amqqueue:internal_delete({resource,<<"所在vhost">>,queue,<<"出问题的队列">>}).'
关闭应用,删除队列后,有可能回复。
最终,继续深入查看错误日志
{gen_server2,call,[<0.26274.8>,{init,new},infinity]}},
[{gen_server2,call,3,[{file,"src/gen_server2.erl"},{line,327}]},
{rabbit_channel,handle_method,3,
[{file,"src/rabbit_channel.erl"},{line,1335}]},
{rabbit_channel,handle_cast,2,
[{file,"src/rabbit_channel.erl"},{line,459}]},
{gen_server2,handle_msg,2,[{file,"src/gen_server2.erl"},{line,1048}]},
{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,247}]}]}
=ERROR REPORT==== 2-May-2018::20:26:08 ===
Restarting crashed queue '问题队列' in vhost '/'.
至此,怀疑是erlang语言有bug。
查看rabbitmq官网。
http://www.rabbitmq.com/which-erlang.html,此页面介绍了rabbitmq需要的erlang版本,并提示了修复的bug

这两个解决的问题,很显然就是我们的问题。所以对erlang和rabbitmq进行了升级。
为了保证平滑升级,不停机,我们仅将erlang升级到19.3.6.8,rabbitmq升级到3.6.14。否则需要停集群
具体升级很简单,停rabbitmq-server服务,然后卸载erlang,此时会把rabbitmq也卸载。然后安装新的erlang和rabbitmq,启动服务后,自动就在集群里面了
记一次erlang语言bug导致rabbitmq的队列没有消费者的问题的更多相关文章
- Go语言系列之RabbitMQ消息队列
1. RabbitMQ是什么? MQ 是什么?队列是什么,MQ 我们可以理解为消息队列,队列我们可以理解为管道.以管道的方式做消息传递. 生活场景: 1.其实我们在双11的时候,当我们凌晨大量的秒 ...
- 在 CentOS7 上安装 RabbitMQ 消息队列中间件
RabbitMQ 是流行的开源消息队列系统,是 AMQP(Advanced Message Queuing Protocol 高级消息队列协议)的标准实现,用 erlang 语言开发.RabbitMQ ...
- golang监听rabbitmq消息队列任务断线自动重连接
需求背景: goalng常驻内存任务脚本监听rbmq执行任务 任务脚本由supervisor来管理 当rabbitmq长时间断开连接会出现如下图 进程处于fatal状态 假如因为不可抗拒因素,rabb ...
- Erlang语言介绍
Erlang (/ˈɜrlæŋ/ er-lang) is a general-purpose concurrent, garbage-collected programming language an ...
- 记一次线上bug排查-quartz线程调度相关
记一次线上bug排查,与各位共同探讨. 概述:使用quartz做的定时任务,正式生产环境有个任务延迟了1小时之久才触发.在这一小时里各种排查找不出问题,直到延迟时间结束了,该任务才珊珊触发.原因主要就 ...
- 程序bug导致了天大的损失,要枪毙程序猿吗?[ZZ]
来自猫扑:程序bug导致了天大的损失,要枪毙程序猿吗? 0 引言 年会上Review 源代码算什么? 法庭上 Review code 才带劲..... 2015年9月3日,随着东京最高法院驳回瑞穗证券 ...
- 服务器cpu过高修复:操作系统内核bug导致
服务器cpu过高修复:操作系统内核bug导致修改系统内核参数/etc/sysctl.conf添加下面2条参数:vm.dirty_background_ratio=5vm.dirty_ratio=10
- 内核futex的BUG导致程序hang死问题排查
https://mp.weixin.qq.com/s/sGS-Kw18sDnGEMfQrbPbVw 内核futex的BUG导致程序hang死问题排查 原创: 王领先 58架构师 今天 近日,Had ...
- 解决由于显卡驱动BUG导致桌面右键卡顿的问题:bat文件源码
@ ECHO OFF%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe&q ...
随机推荐
- android获取设备唯一标示
概述 有时需要对用户设备进行标识,所以希望能够得到一个稳定可靠并且唯一的识别码.虽然Android系统中提供了这样设备识别码,但是由于Android系统版本.厂商定制系统中的Bug等限制,稳定性和唯一 ...
- UNIX网络编程——UDP编程模型
使用UDP编写的一些常见得应用程序有:DNS(域名系统),NFS(网络文件系统)和SNMP(简单网络管理协议). 客户不与服务器建立连接,而是只管使用sendto函数给服务器发送数据报,其中必须指定目 ...
- 关于NOR_FLASH的大小在单片机程序中的应用
在单片机开发中,NOR_FLASH常用的有4M和8M的大小: 4M的FLASH在程序中可以这样表示:Ptr < 0x220000 8M的FLASH在程序中可以这样表示:Ptr < 0x40 ...
- Android初级教程之内容提供者获取联系人信息
内容提供折详细理论知识请参考之前的博文:http://blog.csdn.net/qq_32059827/article/details/51646513 这里新建了三个联系人信息,通过查看系统联系人 ...
- android 网络通信框架volly
1. 什么是Volley 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient( ...
- moonmq: 用go实现的高性能message queue
介绍 moonmq是一个用go实现的高性能消息队列系统,后续准备用于我们消息推送服务以及各个后台的异步任务. 在设计上面,moonmq主要借鉴了rabbitmq以及rocketmq相关的思想,但是做了 ...
- 04-GIT TortoiseGit冲突和补丁演示 案例演示
TortoiseGit安装下载 http://download.tortoisegit.org/tgit/1.8.12.0/ 或https://code.google.com/p/tortoisegi ...
- JAVA集合类——难得的总结
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41346969 以下资料是在学习中总结出来的,希望对你有所帮 ...
- Volley请求
1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行H ...
- 怎样将Android手机弄死机?
将Android手机弄死机目前知道有两种方式: 第一种: 以root权限在shell中执行 stop 通过 start 但是这种串口还是可以用 第二种: suecho "c" &g ...