linux系统中文件句柄数调低后EMQX在大量连接时崩溃

错误报告

环境

  • EMQX 版本:4.1
  • 操作系统版本:centos 7

重现此问题的步骤

  1. ulimit -n 5000 将linux服务器句柄数限制调低
  2. 使用 Jmeter 创建客户端连接至 5000+

预期行为

客户端的连接受限,或客户端连接被踢出

实际行为

EMQX 宕机崩溃,日志没有多余信息

2023-02-17 03:12:22.784 [warning] Ranch acceptor reducing accept rate: out of file descriptors

2023-02-17 03:12:22.786 [warning] Ranch acceptor reducing accept rate: out of file descriptors

2023-02-17 03:12:22.884 [warning] Ranch acceptor reducing accept rate: out of file descriptors

2023-02-17 03:12:22.884 [warning] Ranch acceptor reducing accept rate: out of file descriptors

功能请求

描述你需要的功能

当文件句柄数达到上限时进行保护

为什么你需要这个功能

如果EMQX可以获取最大句柄数限制为何不可以在超过上限时进行保护避免宕机

你好,EMQX 提供了最大连接数配置,你可以自行调整的,配置项为 max_connections

不过确实不应该导致宕机,我们会优化这一行为。

如果最大连接数高于系统句柄数限制时,大量连接导致的EMQX宕机是必然现象嘛?

目前来说是的

我看Dashboard能够获得系统设置的句柄数大小,通过代码优化应该能够避免这个问题。谢谢你的解答辛苦了!

fd不只是用来消耗做连接, 还有别的磁盘操作等等。
底层很多地方不会给我们机会做保护。

你可以想象成文件系统写满后的副作用, 系统会处于一个不确定的状态。

我们会有内部讨论来如何减轻这个问题。但这个终究是操作系统层面的问题, 所以还是希望sysadmin能在启动前 预留好足够的fds。