[转帖]RabbitMQ性能优化

rabbitmq,性能,优化 · 浏览次数 : 0

小编点评

**RabbitMQ配置文件配置** ```json { "mnesia": [ { "dump_log_write_threshold": 1000 }, { "rabbit": [ { "tcp_listeners": [5673] } ] } ], "memory": { "vm_memory_high_watermark": 0.4 }, "page_threshold": { "paging_ratio": 0.75 } } ``` **配置说明:** * `memory`:设置 RabbitMQ 使用的内存占用率。 * `page_threshold`:设置当内存中数据达到一定数量后,页面被页出多少百分比。 * `hipe_compile`:开启 HiPE 优化。 **注意:** * `vm_memory_high_watermark` 用于设置内存限制,当 RabbitMQ 使用的内存超过此值时触发内存警告。 * `page_threshold` 用于设置页面置换的百分比。 * `hipe_compile` 参数用于启用 HiPE 优化。

正文

https://www.cnblogs.com/zhengchunyuan/p/9253728.html

 

修改rabbitmq.config文件

rabbitmq.config文件时rabbitmq的配置文件,他遵守Erlang配置文件定义。 rabbitmq.config文件位置:

  • Unix $RABBITMQ_HOME/etc/rabbitmq
  • Windows %APPDATA%\RabbitMQ\

例子如下:

[
    {mnesia, [{dump_log_write_threshold, 1000}]},
    {rabbit, [{tcp_listeners, [5673]}]}
  ].

Memory配置和设置

RabbitMQ在使用当前机器的40%以上内存时候,会发出内存警告,并组织RabbitMQ所有连接(producer连接)。直到RabbitMQ将当前数据刷入到硬盘或者消息被客户端消费。

当Erlang的垃圾回收机制运行起来(这是一个非常耗费资源的工作),会消费两倍内存。(默认是80%的内存)。因此需要操作系统支持OS swap和page file.

注意:在32为架构下,每个进程被限制为2GB。通常64架构系统限制每个进程为256TB,64位windows限制为8TB。就算在64位操作系统下,32位的进程只能用2GB内存。 因此强烈推荐使用64bit Erlang vm和64bit os。

当RabbitMQ不能识别你的系统的时候,你必须对vm_memory_high_watermark进行修改。 当rabbitmq不能识别系统的时候,会设置内存为1024MB。所以rabbitmq实际使用的内存仅仅410MB。 当系统为8GB的时候,我们可以这是vm_memory_high_watermark=3,那么我们实际可以使用的内存为3GB。

配置Memory Threshold文件

默认配置RabbitMQ的vm_memory_high_watermark=0.4

[{rabbit, [{vm_memory_high_watermark, 0.4}]}].

举例说明:

当机器内存为16GB,那么40%,为6.4GB。主要当32系统时候,实际可以使用的内存为2GB,那么实际可以使用的内存为820MB。

当我配置vm_memory_high_watermark=0 我们可以阻止所有消息发送。

注意:这个百分比,最好不要修改。应为Erlang VM回收的时候会占据系统内存的80%。已经达到系统临界区。不要设置超过50%的百分比。

配置Page Threshold文件

当内存中的数据达到一定数量后,他需要被page out出来。 默认配置 vm_memory_high_watermark_paging_ratio=0.5。也就是vm_memory_high_watermark0.5。假设总内存8GB,0.4的使用内存是3.2。那么当内存叨叨3.20.5=1.6GB时候,系统将会大量置换页面。

因此我们可以将页面置换的百分比调高。设置为0.75

[{rabbit, [{vm_memory_high_watermark_paging_ratio, 0.75},
         {vm_memory_high_watermark, 0.4}]}].

注意:我们可以将vm_memory_high_watermark_paging_ratio设置超过1.0,那么不会发生内存换页的情况,也就是说,当内存超过总内存的40%之后,将会阻止所有producer产生消息。

配置命令

rabbitmqctl  set_vm_memory_high_watermark 0.4

这是内存使用占总内存数的百分比

rabbitmqctl set_vm_memory_high_watermark_paging_ratio 0.75

设置rabbitmq使用内存达到rabbitmq可用内存百分比,就出发页面交换功能。

rabbitmqctl status

获得系统配置。

Disk配置和设置

RabbitMQ会在硬盘空间不够的时候,阻止Producer发送消息。这样可以保证RabbitMQ可以再任何时候,将内存中的数据置换到磁盘中来。通常会将硬盘剩余数据大小设置为机器的总内存大小。

全局流控制会被触发,当可用总硬盘容量已经低于配置信息。broker数据库将会最少10秒检查一下警告是否发出或者清除。

在RabbitMQ启动的后,会打印disk limit限制,但是不能识别的平台就不能显示信息。

注意:当RabbitMQ是集群情况下,当其中有一台机器硬盘不足的时候,所有节点的producer链接都会被阻止。

RabbitMQ会定期价检查总磁盘可用空间的大小。通常时间为10秒每次,当限制快被达到时候,RabbitMQ检查的时候会达到10次/s.

配置Disk Free Space Limit

我们可以直接设置硬盘的最小限制。也可以设置相对内存大小的设置。

先设置磁盘1GB限制

[{rabbit, [{disk_free_limit, 1000000000}]}].

在这时相对于机器总内存

[{rabbit, [{disk_free_limit, {mem_relative, 1.0}}]}].

Erlang的Hipe优化

可以设置hipe_compiles设置。可以看到有20-50%的性能优化。而你只需要付出1分钟左右的延迟启动。 HiPE需要你检查是否编译进入你的Erlang安装环境。Ubuntu,需要安装erlang-base-hipe.默认有些平台不支持。如果Erlang VM segfaults,请关闭这个选项。

[{rabbit, [{hipe_compile, true}]}].

参考:http://www.rabbitmq.com/configure.html#configuration-file

与[转帖]RabbitMQ性能优化相似的内容:

[转帖]RabbitMQ性能优化

https://www.cnblogs.com/zhengchunyuan/p/9253728.html 修改rabbitmq.config文件 rabbitmq.config文件时rabbitmq的配置文件,他遵守Erlang配置文件定义。 rabbitmq.config文件位置: Unix $R

[转帖]RabbitMQ服务优化,修改最大连接数

https://www.cnblogs.com/hoyeong/p/16242202.html RabbitMQ的优化RabbitMQ的连接数是压垮消息队列的一个重要的指标。所以在平时使用OpenStack平台的过程中,如果大量的用户同时创建虚拟机,会导致云平台创建报错,其实就是消息队列服务的崩溃。

[转帖]RabbitMQ的Vhost,Exchange,Queue原理分析

RabbitMQ的Vhost,Exchange,Queue原理分析https://www.cnblogs.com/zhengchunyuan/p/9253725.html Vhost分析 RabbitMQ的Vhost主要是用来划分不同业务模块。不同业务模块之间没有信息交互。 Vhost之间相互完全隔

[转帖]RabbitMQ 的重要概念(术语)

Message 消息指的是 RabbitMQ 的队列中保存的数据。 Producer 消息的生产者,即 message publisher(sender),是指负责创建和发送消息的程序。 Vhost RabbitMQ 的虚拟主机,一个 broker 里可以开设多个 vhost,用作不同用户的权限分离

[转帖]RabbitMQ基础概念详细介绍

https://www.jianshu.com/p/e55e971aebd8 AMQP简介 AMQP,即 Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦和通讯。 AMQP的主要

[转帖]RabbitMQ 死信队列

https://blog.csdn.net/lamp_yang_3533/article/details/111463928 死信交换机 DLX(Dead-Letter-Exchange)可以称之为死信交换机,也称之为死信邮箱。 当消息在一个正常的业务队列中变成死信(dead message)之后,

[转帖]RabbitMQ 如何保证交换机中的消息不丢失

我们知道,生产者会先将消息发送给交换机,但是如果交换机此时没有匹配到相关的队列时,交换机中的消息就会出现丢失的问题。 那么,如何保证交换机中的消息不丢失呢? mandatory 参数 当 basicPublish 方法的 mandatory 参数设为 true 时,如果交换器无法匹配到绑定的队列,那

[转帖]RabbitMQ:Exchange的Fanout类型的介绍和使用

https://blog.csdn.net/weixin_45492007/article/details/106095591 1.声明 当前的内容用于本人学习和使用Fanout类型的Exchange,主要理解其主要作用 2.Fanout Exchange的官方介绍 扇出交换机将消息路由到与其绑定的

[转帖]RabbitMQ 消费者回执和发布确认

为了保证数据安全,消费者和生产者的回执(ack)都是非常重要的。 由于我们无法保证消息都能像我们期望的那样,正常到达另一端或者被 Consumer 消费成功。因此,publisher 和 consumer 都需要一种机制,来确保消息投递成功了和消息消费成功了。 在 AMQP 0-9-1 中,消费者处

[转帖]RabbitMQ学习笔记01:初识与安装

https://www.cnblogs.com/alongdidi/p/rabbitmq_overview.html 原作者写的真好. 前言 本人是一名运维工程师,在此公司接触到 RabbitMQ ,平时针对此软件的工作内容就是集群的安装以及配置监控等,对其的理解也仅仅是知道其是一种消息队列的服务,