Rabbitmq 文件描述符限制

Posted

技术标签:

【中文标题】Rabbitmq 文件描述符限制【英文标题】:Rabbitmq File Descriptor Limit 【发布时间】:2018-02-24 16:09:31 【问题描述】:

Rabbitmq 文档说我们需要在生产环境中使用它之前进行一些配置。其中一项配置是关于最大打开文件数(这是一个操作系统参数)。

我们使用的 Rabbitmq 服务器在 Ubuntu 16.04 上运行,根据我在网上找到的资源,我将打开文件的数量更新为 500k。当我从命令行检查它时,我得到以下输出:

root@madeleine:~# ulimit -n
500000

但是,当我查看 rabbitmq 服务器状态时,我看到了另一个数字。

root@madeleine:~# rabbitmqctl status | grep 'file_descriptors' -A 4
 file_descriptors,
     [total_limit,924,
      total_used,19,
      sockets_limit,829,
      sockets_used,10],

看起来,我设法增加了操作系统端的限制,但是rabbitmq仍然认为文件描述符的总限制是924。

什么可能导致这个问题?

【问题讨论】:

这完全取决于你如何运行 RabbitMQ,以及你如何配置打开文件限制。 @RogerLipscombe 我正在使用配置文件来运行 Rabbitmq。它的内容在这里,你能看一下吗? [rabbit, [vm_memory_high_watermark, 0.4,disk_free_limit, mem_relative, 2.0]]。 您使用的是哪个操作系统?你用 systemd 吗? Ubuntu 16.04.2 LTS,是的,我正在使用 systemd 【参考方案1】:

增加/设置打开文件的最大数量

sudo sysctl -w fs.file-max=65536 这些限制在 /etc/security/limits.conf 中定义

sudo nano /etc/security/limits.conf 并设置

软文件 65536 硬文件 65536 rabbitmq 进程的每个用户设置也可以在 /etc/default/rabbitmq-server

sudo nano /etc/default/rabbitmq-server 并设置

ulimit -n 65536 然后重新启动服务器以使更改生效。

【讨论】:

这些步骤似乎可行。 ulimit -n 现在返回 65536 但在 rabbitmqctl status 命令的输出中,file_descriptors 的值没有增加。【参考方案2】:

你可能想看看这个page

显然,此操作取决于操作系统版本。如果您有 systemd,则应在 /etc/systemd/system/rabbitmq-server.service.d/limits.conf 文件中执行以下操作:

请注意,根据您使用的操作系统,此服务配置可能位于其他位置。您可以使用以下命令查找此服务配置所在的位置并更新该文件。

find / -name "*rabbitmq-server.service*"

[服务]

LimitNOFILE=300000

另一方面,如果你没有 systemd 文件夹,你应该在你的 rabbitmq-env.conf 文件中试试这个:

ulimit -S -n 4096

【讨论】:

ubuntu 16.04 /lib/systemd/system/rabbitmq-server.service 在 [Service] 块下添加 LimitNOFILE 工作 @cwhsu,这是一个非常糟糕的建议,因为该文件可能会被包更新覆盖。 编辑 systemd 服务的正确方法是sudo systemctl edit rabbitmq-server.service - 这将找出覆盖文件的正确位置并在您首选的编辑器中打开它。然后您可以按照建议添加[Service] 块,保存并退出。 systemctl 然后还会为您重新加载配置。 另一种方式(ubuntu 16.04)。安装后没有文件夹/etc/systemd/system/rabbitmq-server.service.d。只需创建它并将文件limits.conf放入该文件夹即可。在文件中添加 [Service] 块作为答案。然后在控制台sudo service rabbitmq-server restart 重启,sudo rabbitmqctl status 进行检查。

以上是关于Rabbitmq 文件描述符限制的主要内容,如果未能解决你的问题,请参考以下文章

Rabbitmq之file descriptors

我们如何将文件描述符限制为始终小于 1024?

linux fopen个数限制的问题(文件描述符限制)

如何将 Winston 限制为每个日志文件只有 1 个文件描述符

Rabbitmq之socket descriptors

MySQL文件描述符达到限制异常解决:File Descriptor xxxx exceeded FD_SETSIZE=xxxx