【发布时间】:2016-09-04 08:34:10
【问题描述】:
我正在运行带有 Erlang/OTP 17 的 Ejabberd 15.04,并在我运行 ejabberd 的所有 4 个 EC2 Amazon 实例中使用 Ubuntu [64 位]。 Ejabberd 是从源代码安装的。
我已经为它配置了 65,535 个文件描述符和以下配置:
ERL_MAX_PORTS=360,000
ERL_PROCESSES=15,000,000
ERL_MAX_ETS_TABLES=100,000
问题是,服务器突然停止工作,我在日志中发现了数百次:
2016-05-09 13:22:45.901 [错误] @ejabberd_listener:accept:317 (#Port) TCP 接受失败:emfile
我已经制作了自己的模块,并在一个由 4 个 erlang 节点组成的集群中运行 ejabberd,位于 Elastic Load Balancer(亚马逊的)后面。这些机器有 4 个内核和 30GB 内存。 我已将名册模块迁移到 ODBC(MariaDB,类似于 mysql)。 80k 用户同时连接。
我认为文件描述符足够高,erlang 进程和端口也是如此。 错误突然出现,服务器正常运行了 3 周。也许原因与mysql有关?如果您知道原因可能是什么,我将非常感激。
提前致谢。
【问题讨论】:
-
在 # /etc/security/limits.conf 中设置 nofile(打开文件的最大数量)
标签: mysql erlang mariadb ejabberd