Rabbitmq消息队列调优

 

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

 

posted @ 2023-10-20 15:15  陈思进取  阅读(268)  评论(0)    收藏  举报