RabbitMQ在CentOS上的资源限制配置
RabbitMQ的内存限制通过rabbitmq.conf配置文件设置,常用参数包括:
vm_memory_high_watermark:内存低水位线,当内存使用达到该阈值时,RabbitMQ会开启流控机制(阻止新消息进入),防止内存溢出。可设置为相对值(系统总内存的比例,如0.6表示60%)或绝对值(如2GB)。示例配置:vm_memory_high_watermark.relative = 0.6 # 使用系统总内存的60%作为阈值
# vm_memory_high_watermark.absolute = 2GB # 或使用绝对值(二选一)
vm_memory_high_watermark_paging_ratio:内存分页阈值,当内存使用达到低水位线的该比例时,RabbitMQ会将内存中的消息换页到磁盘(减少内存占用)。示例配置:vm_memory_high_watermark_paging_ratio = 0.5 # 达到低水位线50%时开始换页
修改配置后需重启RabbitMQ服务使更改生效:sudo systemctl restart rabbitmq-server。
通过disk_free_limit参数设置磁盘可用空间阈值,当磁盘剩余空间低于该值时,RabbitMQ会阻塞生产者(阻止新消息写入),避免磁盘空间耗尽。可设置为相对值(系统总磁盘空间的比例,如1.0表示10%)或绝对值(如5GB)。示例配置:
disk_free_limit.absolute = 5GB # 磁盘剩余空间低于5GB时触发限制
# disk_free_limit.relative = 1.0 # 或使用相对值(二选一)
修改后需重启RabbitMQ服务。
RabbitMQ作为高并发消息中间件,需要较高的文件描述符限制(用于管理连接、队列、文件等资源)。
编辑/etc/security/limits.conf文件,添加以下内容(适用于所有用户):
* soft nofile 65536 # 软限制:当前会话可动态调整的最大文件描述符数(不超过硬限制)
* hard nofile 65536 # 硬限制:系统允许的最大文件描述符数(需root修改)
* soft nproc 32768 # 进程数量软限制
* hard nproc 32768 # 进程数量硬限制
编辑/etc/sysctl.conf文件,设置系统级最大文件描述符数:
fs.file-max = 2097152 # 系统全局最大文件描述符数
应用更改:sudo sysctl -p。
limits.conf生效);若RabbitMQ通过Systemd管理(默认方式),可通过修改服务文件设置资源限制:
编辑/etc/systemd/system/rabbitmq.service(若不存在则复制/lib/systemd/system/rabbitmq.service),在[Service]段添加:
MemoryLimit = 1G # 限制RabbitMQ进程最大使用1GB内存
修改后执行以下命令使更改生效:
sudo systemctl daemon-reload
sudo systemctl restart rabbitmq-server
注:Systemd的资源限制会覆盖ulimit设置,优先级更高。
通过cgroups(控制组)可更细粒度地限制RabbitMQ的资源使用(如内存、CPU):
sudo yum install libcgroup-tools -y
sudo cgcreate -g memory:/rabbitmq # 创建内存控制组
echo "1G" | sudo tee /sys/fs/cgroup/memory/rabbitmq/memory.limit_in_bytes # 限制内存为1GB
sudo cgclassify -g memory:/rabbitmq $(pgrep rabbitmq-server) # 将RabbitMQ主进程加入cgroup
注:cgroups配置在系统重启后会失效,需通过脚本或服务实现持久化。