RabbitMQ每增加一个连接,Erlang都会给这个连接分配三个Erlang进程,每个进程都会分配一定大小内存空间,所以随着连接数的增长,内存和Erlang进程数呈现有规律的增长,所以RabbitMQ连接数的无限增大会压垮mq服务,导致RabbitMQ服务崩溃。
客户端与RabbitMQ建立的是长连接,而不是建立短连接,因为如果频繁的建立、销毁connection,会增加额外的时间开销,当业务量比较大时,就会对系统性能产生比较大的影响。OpenStack组件与RabbitMQ的连接使用到了第三方库oslo_message中的connection pool的概念,在不超过pool size的前提上,当有并发业务的时候,如果发现pool中已有connection正被使用,那么就会在pool中继续创建新的connection,直到创建的connection数量达到pool的最大值,之后如果再有业务需要,会等待之前创建的connection被重新放入connection pool,然后等待被继续使用。这种情况下,就会出现connection一直增长的现象。
RabbitMQ的优化
在上面的文章中可以看到,RabbitMQ的连接数是压垮消息队列的一个重要的指标。所以在平时使用OpenStack平台的过程中,如果大量的用户同时创建虚拟机,会导致云平台创建报错,其实就是消息队列服务的崩溃。
在优化方面,我们首先想到,是将RabbitMQ服务默认的连接数量改大,修改方法如下:
一、系统级别调修改
在/etc/sysctl.conf文件的最下方添加一行fs.file-max=10240:
vi /etc/sysctl.conf
fs.file-max=10240
二、 用户级别修改
在/etc/security/limits.conf文件下添加两行:
vi /etc/security/limits.conf
openstack soft nofile 10240
openstack hard nofile 10240
三 、修改Rabbitmq配置文件
在/usr/lib/systemd/system/rabbitmq-server.service文件[Service]下添加一行参数如下:
vi /usr/lib/systemd/system/rabbitmq-server.service
LimitNOFILE=10240
四、重启服务
systemctl daemon-reload
systemctl restart rabbitmq-server
五 、查看
rabbitmqctl status
标签:队列,RabbitMQ,etc,connection,调优,Rabbitmq,conf,10240,pool From: https://www.cnblogs.com/Chen-Yi-jia/p/17777181.html