RabbitMQ是一个消息队列系统


一 下载安装

RPM包下载

http://www.rabbitmq.com/releases/rabbitmq-server/v3.5.3/rabbitmq-server-3.5.3-1.noarch.rpm

源码包下载

http://www.rabbitmq.com/releases/rabbitmq-server/v3.5.3/rabbitmq-server-3.5.3.tar.gz


在安装RabbitMQ之前需要安装Erlang语言

http://www.rabbitmq.com/releases/erlang/erlang-17.4-1.el6.x86_64.rpm


rpm -ivh erlang-17.4-1.el6.x86_64.rpm 


rpm --import https://www.rabbitmq.com/rabbitmq-signing-key-public.asc

rpm -ivh rabbitmq-server-3.5.3-1.noarch.rpm


chkconfig rabbitmq-server on

service rabbitmq-server start


安装好后,通过rabbitmqctl管理


日志轮转在/etc/logrotate.d/rabbitmq-server 中设置




二 ulimit设置

使用RabbitMQ处理高并发连接和队列时需要对操作系统的资源限制做些设置,主要是最大文件打开数量的设置。

有两个设置需要考虑:操作系统允许的最大文件打开数量(fs.file-max)和允许每个用于最大打开文件数量(ulimit -n),前者必须大于后者。


CentOS默认的soft 最大文件打开数量是1024,hard 最大文件打开数量是4096


# ulimit -n

1024

# ulimit -Sn

1024

# ulimit -Hn

4096


ulimit -n只能对当前会话生效,在启动RabbitMQ之前设置ulimit -n,RabbiMQ启动后的资源限制会生效。

[root@test71 ~]# ulimit -n
1024
[root@test71 ~]# service rabbitma-server start
rabbitma-server: unrecognized service
[root@test71 ~]# service rabbitmq-server start
Starting rabbitmq-server: SUCCESS
rabbitmq-server.
[root@test71 ~]# rabbitmqctl status|grep pid
[{pid,6142},
[root@test71 ~]# cat /proc/6142/limits|grep file
Max file size             unlimited            unlimited            bytes     
Max core file size        0                    unlimited            bytes     
Max open files            1024                 4096                 files     
Max file locks            unlimited            unlimited            locks


可以看到在启动RabbitMQ之前没有设置ulimit -n,那么启动之后RabbitMQ的进程能够打开的最大文件数量就是系统默认设置的。

[root@test71 ~]# service rabbitmq-server stop
Stopping rabbitmq-server: RabbitMQ is not running
rabbitmq-server.
[root@test71 ~]# ulimit -n
1024
[root@test71 ~]# ulimit -SHn 65536
[root@test71 ~]# ulimit -n
65536
[root@test71 ~]# ulimit -Sn 
65536
[root@test71 ~]# ulimit -Hn
65536
[root@test71 ~]# service rabbitmq-server start
Starting rabbitmq-server: SUCCESS
rabbitmq-server.
[root@test71 ~]# rabbitmqctl status|grep pid
[{pid,6973},
[root@test71 ~]# cat /proc/6973/limits|grep files
Max open files            65536                65536                files


可以看到启动RabbitMQ之前设置ulimit,启动以后RabbitMQ的进程的soft和hard限制都变成了65536.


然后再退出当前会话

Connecting to 172.28.10.71:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

Last login: Sat Jul  4 05:08:17 2015 from 172.28.13.165
[root@test71 ~]# ulimit -n
1024
[root@test71 ~]# rabbitmqctl status|grep pid
[{pid,6973},
[root@test71 ~]# cat /proc/6973/limits|grep files
Max open files            65536                65536                files


可以看到之前设置的最大文件打开数量65535变成了系统默认的1024,所以ulimit -n只能对当前会话起作用,并且一定要是在启动程序之前进行设置,不能对正在运行的进程设置


如果需要RabbitMQ每次启动后的进程对文件的最大打开数量都符合需求,可以在启动脚本里面设置ulimit -SHn 65536

[root@test71 ~]# service rabbitmq-server start
Starting rabbitmq-server: SUCCESS
rabbitmq-server.
[root@test71 ~]# ulimit -n
1024
[root@test71 ~]# rabbitmqctl status|grep pid
[{pid,8084},
[root@test71 ~]# cat /proc/8084/limits|grep files
Max open files            65536                65536                files     
[root@test71 ~]# ulimit -n
1024


可以看到在RabbitMQ的启动脚本设置了ulimit,最大文件打开数量也生效了。



查看操作系统总的允许打开的最大文件数量

cat /proc/sys/fs/file-max 

或者

sysctl fs.file-max


如果要限制某一个用户的最大文件打开数量

设置/etc/security/limits.conf

root             soft    nofile          65536

root             hard    nofile          65536


然后重新登录查看ulimit -n


去掉启动脚本的ulimit设置

root@test71 ~]# service rabbitmq-server start
Starting rabbitmq-server: SUCCESS
rabbitmq-server.
[root@test71 ~]# rabbitmqctl status|grep pid
[{pid,9975},
[root@test71 ~]# cat /proc/9975/limits|grep files
Max open files            65536                65536                files     
[root@test71 ~]# ulimit -n
65536









参考文章:

http://www.rabbitmq.com/getstarted.html