解决EMQX服务每过几个小时崩溃crash

服务稳定运行一年多了,最近几天,每过几个小时就回发生crash,服务挂掉。

查看日志,有提示:[warning] Ranch acceptor reducing accept rate: out of file descriptors

大概是说文件描述符不足,这里需要按照文档来进行系统调优。机器安装时都是默认的,文件描述符 ulimit -n 查看为默认的 65536

官方系统调优文档:系统调优 | EMQX文档

关键项为调整系统文件描述符,调整完毕需要重启系统!!!承载量大的话要多节点

Linux 操作系统参数

系统全局允许分配的最大文件句柄数:

# 2 millions system-wide
sysctl -w fs.file-max=2097152
sysctl -w fs.nr_open=2097152
echo 2097152 > /proc/sys/fs/nr_open

允许当前会话 / 进程打开文件句柄数:

ulimit -n 1048576

/etc/sysctl.conf

持久化 fs.file-max 设置到 /etc/sysctl.conf 文件:

fs.file-max = 1048576

/etc/systemd/system.conf 设置服务最大文件句柄数:

DefaultLimitNOFILE=1048576

/etc/security/limits.conf

/etc/security/limits.conf 持久化设置允许用户 / 进程打开文件句柄数:

* soft nofile 1048576
* hard nofile 1048576

TCP 协议栈网络参数

并发连接 backlog 设置:

sysctl -w net.core.somaxconn=32768
sysctl -w net.ipv4.tcp_max_syn_backlog=16384
sysctl -w net.core.netdev_max_backlog=16384

Author: thinkwei

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注