【发布时间】:2011-09-22 19:56:24
【问题描述】:
我正在尝试在小型 VPS(512mb RAM)上运行 RabbitMQ 以及 Nginx 和其他一些程序。我已经能够毫无困难地调整其他所有内容的内存使用情况,但我似乎无法让 RabbitMQ 使用更少的 RAM。
我认为我需要减少 Erlang 用于 RabbitMQ 的线程数,但我无法让它工作。我还尝试将vm_memory_high_watermark 设置为低于默认值(40%)的几个不同值,甚至低至 5%。
部分问题可能是 VPS 提供商 (MediaTemple) 允许我检查分配的内存,因此在使用 free 或 top 时,它显示服务器大约有 900mb。
有什么建议可以减少 RabbitMQ 的内存使用,或者限制 Erlang 将创建的线程数?根据我在 process 命令上看到的 -A30 标志,我相信 Erlang 正在使用 30 个线程。
理想情况下,我希望 RabbitMQ 内存使用量低于 100mb。
编辑:
vm_memory_high_watermark 设置为 5%(或配置文件中的 0.05),RabbitMQ 日志报告 RabbitMQ 的内存限制设置为 51mb。我不确定 51mb 来自哪里。当前 VPS 分配的内存为 924mb,因此其中 5% 应该在 46mb 左右。
根据启动 RabbitMQ 之前的 htop/free,我坐在大约 453mb 的使用过的内存中,而在启动 RabbitMQ 之后,我大约是 650mb。增加近 200mb。会不会是 200mb 是 RabbitMQ 运行的下限?
编辑 2
Here are some screenshots 的 ps aux 和 free 在启动 RabbitMQ 之前和之后以及显示 RabbitMQ 启动时内存峰值的图表。
编辑 3
我还检查了没有启用插件,它几乎没有什么区别。看来我拥有的插件(管理及其先决条件)只增加了大约 8mb 的内存使用量。
编辑 4
我不再有这个服务器来测试,但是,有一个 conf 设置 delegate_count 设置为默认值 16。据我所知,这为 rabbitmq 生成了 16 个 sup-procs。在较小的服务器上降低此数字可能有助于减少内存占用。不知道这是否真的有效,也不知道它如何影响性能,但可以尝试一下。
【问题讨论】:
标签: memory-management erlang rabbitmq