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 文件描述符限制的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Winston 限制为每个日志文件只有 1 个文件描述符
MySQL文件描述符达到限制异常解决:File Descriptor xxxx exceeded FD_SETSIZE=xxxx