减少RabbitMQ内存使用量

Ale*_*ard 27 erlang memory-management rabbitmq

我正在尝试在小型VPS(512mb RAM)上运行RabbitMQ以及Nginx和其他一些程序.我已经能够毫无困难地调整其他所有内存的使用情况,但我似乎无法让RabbitMQ使用更少的RAM.

我想我需要减少Erlang用于RabbitMQ的线程数,但是我无法让它工作.我也尝试将vm_memory_high_watermark一些不同的值设置为低于默认值(40%),甚至低至5%.

部分问题可能是VPS提供程序(MediaTemple)允许我查看我分配的内存,因此当使用free或top时,它表明服务器大约有900mb.

有关减少RabbitMQ内存使用量或限制Erlang将创建的线程数的建议吗?我相信Erlang正在使用30个线程,基于我在进程命令中看到的-A30标志.

理想情况下,我希望RabbitMQ内存使用率低于100mb.

编辑:

随着vm_memory_high_watermark设置为5%(或在配置文件中0.05),在RabbitMQ的日志报告的RabbitMQ的内存限制设置为51MB.我不确定51mb来自哪里.当前VPS分配的内存为924mb,因此其中5%应为46mb左右.

根据启动RabbitMQ之前的htop/free,我坐着大约453mb的二手ram,在启动RabbitMQ之后,我大约650mb.增加近200mb.可能是200MB是RabbitMQ运行的下限吗?

编辑2

下面是启动RabbitMQ之前和之后ps aux和free的一些截图,以及显示RabbitMQ启动时内存峰值的图表.

编辑3

我还检查没有启用插件,它没有什么区别.似乎我拥有的插件(管理及其先决条件)仅增加了大约8mb的ram使用量.

编辑4

我不再需要使用此服务器进行测试,但是,有一个conf设置delegate_count被设置为默认值16.据我所知,这为rabbitmq产生了16个sup-procs.在较小的服务器上降低此数字可能有助于减少内存占用.不知道这是否真的有效,或者它如何影响性能,但这是值得尝试的.

Rob*_*rop 9

在RabbitMQ中限制内存使用的适当方法是使用vm_memory_high_watermark.你说:

我也尝试将vm_memory_high_watermark设置为低于默认值(40%)的几个不同值,甚至低至5%.

应该有效,但可能没有你期望的那样.在日志中,您将找到一条线,告诉您绝对内存限制是什么,如下所示:

=INFO REPORT==== 29-Oct-2009::15:43:27 ===
Memory limit set to 2048MB.
Run Code Online (Sandbox Code Playgroud)

您需要根据需要调整内存限制 - 如果您在VPS环境中运行,Rabbit可能会看到您的系统拥有的内存比您想象的要多得多.

有时,Rabbit无法分辨您所使用的系统并使用1GB作为基点(因此默认情况下限制为410MB).

此外,请确保您运行的RabbitMQ版本支持该vm_memory_high_watermark设置 - 理想情况下,您应该运行最新的稳定版本.

  • 当我停止rabbitmq(/etc/init.d/rabbitmq-server stop)时,所有进程都会消失.运行`top`时,它显示单个rabbitmq-server进程和单个beam.smp进程.但是,当我运行`htop`时,我看到了所有的beam.smp过程.在我killall beam.smp`之后,rabbitmq-server进程消失了.一旦重新开始,我会得到与以前相同的结果. (3认同)