01月19, 2017

rabbitmq解决socket满问题

* [尝试](#尝试)
* [ulimit](#ulimit)

openstack组件之间的通讯很多都是通过消息队列完成,比如计算节点获取创建任务等,所以消息队列的稳定对整个集群影响至关重要,可以说是openstack的神经,我们使用的消息队列是rabbitmq。
我们在使用过程当中发现有时候单个节点rabbitmq,socket会被占满,这样导致好多消息被阻塞,而默认配置单个rabbitmq文件描述符是4096,非常小,非常容易就把socket占满。
所以我们就要想办法增加rabbitmq的文件描述符,增加socket数量。

尝试

按照官方修改方式 修改

/etc/default/rabbitmq 
ulimit -n 10240

重启rabbitmq没有生效。 参考
https://specs.openstack.org/openstack/nova-specs/specs/juno/implemented/libvirt-disk-discard-option.html
又尝试了很多方式,都没有成功。

ulimit

ulimit 文件描述符,分几个级别来控制。

  1. 系统层面
    /etc/security/limits.conf /etc/security/limits.d/,系统层面控制文件描述符数量。
  2. 用户层面
    /etc/security/limits.conf,控制用户的文件描述符数量 #ftp hard nproc 0
  3. 进程层面 每个进程的
    /proc/pid/limits是这个进程的文件描述符数量。

    可使用prlimit来实时调整进程的fd,prlimit --pid 1000 --nofile=10240:10240

这些对rabbitmq都不生效

erlang

erlang的运行环境也会对fd产生影响。 比如 alt
kernel-poll 为false,很可能就调整不了fd
alt
这样就可以。 rabbitmq的运行环境是后一种,所以应该就能调整的。 alt

升级

升级rabbitmq试试。 升级到最新版本3.6.1

rpm -Uvh https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-3.6.1-1.noarch.rpm

修改配置文件

/etc/rabbitmq/rabbitmq-env.conf
ulimit -n 20480

然后重启rabbitmq
生效! alt

so,我们选择了升级解决此问题 :)

本文链接:https://www.opsdev.cn/post/rabbitmq-socket-full.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。