公司开发和测试环境采用的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的队列没有消费者的问题的更多相关文章

  1. Go语言系列之RabbitMQ消息队列

    1. RabbitMQ是什么?   MQ 是什么?队列是什么,MQ 我们可以理解为消息队列,队列我们可以理解为管道.以管道的方式做消息传递. 生活场景: 1.其实我们在双11的时候,当我们凌晨大量的秒 ...

  2. 在 CentOS7 上安装 RabbitMQ 消息队列中间件

    RabbitMQ 是流行的开源消息队列系统,是 AMQP(Advanced Message Queuing Protocol 高级消息队列协议)的标准实现,用 erlang 语言开发.RabbitMQ ...

  3. golang监听rabbitmq消息队列任务断线自动重连接

    需求背景: goalng常驻内存任务脚本监听rbmq执行任务 任务脚本由supervisor来管理 当rabbitmq长时间断开连接会出现如下图 进程处于fatal状态 假如因为不可抗拒因素,rabb ...

  4. Erlang语言介绍

    Erlang (/ˈɜrlæŋ/ er-lang) is a general-purpose concurrent, garbage-collected programming language an ...

  5. 记一次线上bug排查-quartz线程调度相关

    记一次线上bug排查,与各位共同探讨. 概述:使用quartz做的定时任务,正式生产环境有个任务延迟了1小时之久才触发.在这一小时里各种排查找不出问题,直到延迟时间结束了,该任务才珊珊触发.原因主要就 ...

  6. 程序bug导致了天大的损失,要枪毙程序猿吗?[ZZ]

    来自猫扑:程序bug导致了天大的损失,要枪毙程序猿吗? 0 引言 年会上Review 源代码算什么? 法庭上 Review code 才带劲..... 2015年9月3日,随着东京最高法院驳回瑞穗证券 ...

  7. 服务器cpu过高修复:操作系统内核bug导致

    服务器cpu过高修复:操作系统内核bug导致修改系统内核参数/etc/sysctl.conf添加下面2条参数:vm.dirty_background_ratio=5vm.dirty_ratio=10

  8. 内核futex的BUG导致程序hang死问题排查

    https://mp.weixin.qq.com/s/sGS-Kw18sDnGEMfQrbPbVw 内核futex的BUG导致程序hang死问题排查 原创: 王领先 58架构师 今天   近日,Had ...

  9. 解决由于显卡驱动BUG导致桌面右键卡顿的问题:bat文件源码

    @ ECHO OFF%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe&q ...

随机推荐

  1. 嵌入式LINUX环境下视频采集知识

    V4L2是Linux环境下开发视频采集设备驱动程序的一套规范(API),它为驱动程序的编写提供统一的接口,并将所有的视频采集设备的驱动程序都纳入其的管理之中.V4L2不仅给驱动程序编写者带来极大的方便 ...

  2. 修改android应用包名

    由于项目需要,要修改已经开发好的应用包名,这本身很简单,但是如果你没找到门道,可能会白白浪费许多时间. 修改包名有三个地方要改,这三个地方的修改一定要按顺序来,否则你可能会遇到许多不必要的麻烦. 1. ...

  3. (国内)完美下载Android源码Ubuntu版

    今天写的文章莫名奇妙的没了,所以再重新写一篇. 首先,为了方便起见,我已经将系统更换成里Ubuntu,因为官方推荐使用这个Linux发行版.先来一张系统的截图: Ubuntu的版本是16.04(推荐用 ...

  4. Socket编程实践(13) --UNIX域协议

    UNIX域协议 UNIX域套接字与TCP相比, 在同一台主机上, UNIX域套接字更有效率, 几乎是TCP的两倍(由于UNIX域套接字不需要经过网络协议栈,不需要打包/拆包,计算校验和,维护序号和应答 ...

  5. awk 详解+实例

    1. awk简介 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入.一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是li ...

  6. Android Studio集成Genymotion

    Android Studio集成Genymotion比在Eclipse中集成简单多了.主要以下几个步骤: 1.官网先下载Genymotion:http://www.genymotion.com/,下载 ...

  7. Java 开源Wiki:XWiki

    XWiki是一个由Java编写的基于LGPL协议发布的开源wiki和应用平台.之前只接触过MediaWiki,但是MediaWiki是用PHP写的,一直想找找看有没有熟悉的JAVA语言的Wiki系统. ...

  8. 一个炫字都不够??!!!手把手带你打造3D自定义view

    分享一则最近流行的笑话: 最新科学研究表明:寒冷可以使人保持年轻,楼下的王大爷表示虽然今年已经60多岁了,但是仍然冷的跟孙子一样. 呃.好吧,这个冬天确实有点冷,在广州活生生的把我这个原生北方人,冻成 ...

  9. DBA_基本Bash语法汇总

    一.变量 1.变量命名可使用英文字母.数字和下划线,必须以英文字母开头,区分大小写. 2.每个shell都拥有自己的变量定义,彼此互不影响. 3.变量直接以等号赋值,注意等号两边不可留空,若等号右侧有 ...

  10. java工具类(一)之服务端java实现根据地址从百度API获取经纬度

    服务端java实现根据地址从百度API获取经纬度 代码: package com.pb.baiduapi; import java.io.BufferedReader; import java.io. ...