如何调整套接字描述符?

时间:2014-05-10 06:20:42

标签: rabbitmq

enter image description here

我想知道谁调整套接字描述符的数量?

另外,如何自动关闭有限超时的连接?

5 个答案:

答案 0 :(得分:22)

看起来您必须更改系统中的最大打开文件描述符。

从Debian和Ubuntu系统的RabbitMQ安装手册,Controlling system limits部分:

  

运行生产工作负载的RabbitMQ安装可能需要系统   限制和内核参数调整,以处理一个不错的数字   并发连接和队列。需要的主要设置   adjust是打开文件的最大数量,也称为ulimit -n。   许多操作系统上的默认值对于消息传递而言太低   代理(例如,在几个Linux发行版上的1024)。我们推荐   允许用户rabbitmq中至少65536个文件描述符   生产环境。 4096对大多数人来说应该足够了   开发工作量。

     

有两个限制:操作系统的最大打开文件数   内核允许( fs.file-max )和每用户限制( ulimit -n )。该   前者必须高于后者。

     

调整RabbitMQ的每用户限制的最简单方法   是编辑 / etc / default / rabbitmq-server (由RabbitMQ提供   Debian包)或rabbitmq-env.conf在之前调用ulimit   服务已经开始。

     

ulimit -S -n 4096

     

此软限制不能高于硬限制(默认值)   许多发行版中的4096)。 The hard limit can be increased来自    /etc/security/limits.conf文件。这也需要启用   pam_limits.so模块并重新登录或重新启动。

     

请注意,无法更改运行OS进程的限制。

     

有关使用 sysctl 控制 fs.file-max 的详细信息,请   参考优秀的Riak guide on open file limit tuning

P.S:

在RabbitMQ邮件列表" Increasing the file descriptors limit"中讨论了类似的问题。最后一条消息包含RabbitMQ安装文档的最终链接,并明确指向ulimit问题,但阅读它也可以帮助您处理问题,而整个线程涵盖描述符限制来自不同点的问题。

答案 1 :(得分:10)

我在Ubuntu 16.04上运行RabbitMQ 3.6.3并且在这些新版本中给出的答案(在rabbitmq-server文件中使用ulimit)不再适用于我。

我的解决方案是在此文件中配置systemd的限制

/etc/systemd/system/rabbitmq-server.service.d/override.conf

在该文件中,输入此配置

[Service] LimitNOFILE=32768

其中32768是您要配置的文件句柄数。

如果您直接编辑该文件,则需要使用

重新加载systemd配置

sudo systemctl daemon-reload

但您也可以使用systemctl编辑文件,在这种情况下它会自动重新加载配置

sudo systemctl edit rabbitmq-server

答案 2 :(得分:4)

我注意到这里的其他答案确实回答了如何提高套接字描述符限制的问题(在ulimit -n <value>中设置/etc/default/rabbitmq-server),但没有一个回答你的其他问题(为什么829套接字描述符)当文件描述符限制是1024?)

这是由于RabbitMQ正在使用的其他文件句柄的数量。在某种程度上,您将始终拥有较少数量的套接字描述符(从我自己的用法来看,它大约是文件描述符限制的90-95%)。 RabbitMQ的文档提供了建议,即将文件描述符限制设置为预期最大连接数的1.5倍:Tuning For A Large Number of Connections

答案 3 :(得分:3)

您可以在/etc/security/limits.conf中添加以下行

* soft nofile 65000
* hard nofile 65000

用此设置ulimit为65000

答案 4 :(得分:2)

在Ubuntu上为我工作的解决方案是this

首先,找到正确的rabbitmq-server文件。您可以通过在bash提示符下运行locate rabbitmq-server来执行此操作 然后使用sudo vim /etc/default/rabbitmq-server打开文件。它是一个包含行ulimit -n 4096的文件 如果该行已使用#注释掉,则取消注释该行 然后添加EOF作为文件的最后一行。

该文件现在将显示如下:

# This file is sourced by /etc/init.d/rabbitmq-server. Its primary
# reason for existing is to allow adjustment of system limits for the
# rabbitmq-server process.
#
# Maximum number of open file handles. This will need to be increased
# to handle many simultaneous connections. Refer to the system
# documentation for ulimit (in man bash) for more information.
#
ulimit -n 4096
EOF

现在你必须重启rabbitmq。不要重新启动操作系统。
找到您的rabbitmqctl文件并运行:
sudo /usr/sbin/rabbitmqctl stop
然后使用sudo /usr/sbin/rabbitmqctl start &再次启动rabbitmq。

就是这样。现在转到RabbitMQ浏览器UI,您将看到套接字的数量增加了。