记一次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,启动服务后,自动就在集群里面了

原文地址:https://www.cnblogs.com/crazyMartin/p/8989438.html

时间: 2024-10-09 07:40:58

记一次erlang语言bug导致rabbitmq的队列没有消费者的问题的相关文章

erlang语言实现binary_to_term

erlang提供了两个函数用于erlang数据与二进制的转换,term_to_binary 把erlang数据转成一个二进制数据,binary_to_term 则是把二进制数据转为原始的erlang数据.这两个函数都是c实现的,效率很高,可用于序列化和反序列化数据,可以被直接用来当作网络封包协议.文章主要探讨这种二进制协议数据的组织形式,以及用erlang语言实现binary_to_term 前言 接触erlang可能有这些疑问,或者听别人这样说起: 1.erlang数字可以无限长,远远超过了I

Erlang语言学习入门

学习资料: 官方Doc:http://www.erlang.org/doc.html 写的特别详细: http://www.cnblogs.com/zhengsyao/ (强推,写得很详细) 系统技术研究:http://blog.yufeng.info/ 庄周梦蝶erlang板块:http://www.blogjava.net/killme2008/category/20770.html 博客园的一位大牛:http://www.cnblogs.com/lulu/category/559387.h

程序Bug导致了天大的损失,要枪毙程序员吗?

转自 http://www.cocoachina.com/programmer/20160331/15835.html 号外!号外!走过,路过,不要错过!日本 IT 业的狗血八卦继续独家放送啦!! 2015 年 9 月 3 日,随着东京最高法院驳回瑞穗证券的上诉,维持二审的原判结果,一个长达 10 年的诉讼终于画下了句号.这个判例将对 IT 行业产生深远的影响:如果程序的 bug 导致了巨大的经济损失,应该由谁来承担?用户?运营商?还是系统开发商? bug:计算机程序里的错误 今天故事的主角是,

Erlang语言研究综述

摘 要: 本文前半部分主要是关于Erlang编程语言相关的内容:着重就一般学习编程语言的一般的关注点来阐述了Erlang编程语言的基本语法点,主要包括:Erlang的变量.Erlang的数据类型.Erlang的语句和Erlang编程语言的函数与模块四个方面:本文的后半部分主要就Erlang语言的并行化编程的实践:Erlang的并行化编程与Erlang并行化编程在矩阵乘积的实际应用,通过实践,可以发现,Erlang语言确实在并行化编程方面表现得很优秀. 关键词:并行计算:Erlang:编程语言:矩

2.Erlang语言精要

?与Erlang shell交互 ?数据类型.模型.函数与代码编译 ?单赋值变量与模式匹配 ?Erlang语言生存指南 ?如何运用递归来编程 Erlang shell使用小技巧  help().

记一次erlang 节点CPU严重波动排查过程

新服务上线后观察到,CPU在10 ~ 70%间波动严重,但从每秒业务计数器看业务处理速度很平均. 接下来是排查步骤: 1. dstat -tam 大概每10s一个周期,网络流量开始变得很小,随后突然增大,CPU也激增. 网络流量变化和从性能计数器结果上并不符合,服务相关业务较为复杂,先找出那个业务占用网络流量. 2. iftop 找出流量最大的几个目标IP,并且周期的流量变为0随后激增. 通过IP 知道是外部http接口地址,因为接口调用是异步进行的,性能计算是执行开始记录的,而不是结束记录,因

程序bug导致了天大的损失,要枪毙程序猿吗?

程序bug导致了天大的损失,要枪毙程序猿吗? 作者: 雷子  发布时间: 2016-03-24 10:34  阅读: 33465 次  推荐: 63   原文链接   [收藏] 文/雷子,来源/公众号:东京 IT 人 号外!号外!走过,路过,不要错过!日本 IT 业的狗血八卦继续独家放送啦!! 2015 年 9 月 3 日,随着东京最高法院驳回瑞穗证券的上诉,维持二审的原判结果,一个长达 10 年的诉讼终于画下了句号.这个判例将对 IT 行业产生深远的影响:如果程序的 bug 导致了巨大的经济损

CentOS安装Prolog和Erlang语言

安装Erlang比较简单 下载Erlang的压缩包 输入tar -zxvf 压缩包 解压 进入解压的目录下 输入./configure 在./configure执行完成后,输入make 然后输入make install即可完成 运行时输入erl即可进入交互命令行模式 Prolog我安装的是Swing-Prolog 还有一个GNU Prolog不过我并没有安装 安装Swing-Prolog同样是很简单的, 首先将压缩包解压,输入tar -zxvf 压缩包 进入解压后的目录,输入./configur

nfs-utils bug导致nfs挂载失败

背景:进行nfs实验时,发现nfs 挂载时使用mount -a 失败,提示如下信息mount.nfs: access denied by server while mounting system1.domain1.example.com:/product 步骤:1.查看nfs-server日志tail -f /var/log/messages 没有任何提示/var/log/路径下也无任何相关日志 2.查看服务器端firewalld 配置一切正常 3.检查client 网络连接没有发现异常 [[e