如何让Mqtt服务器支持超过65535个连接?
操作系统参数优化
编辑修改 /etc/sysctl.conf,增加以下内容:
# 这里开始优化mqtt服务器性能
# 内存分配策略
vm.overcommit_memory = 1
# 以下2个配置,设置系统全局最大文件句柄
fs.file-max = 1048576
# 注意,若nofile参数值大于nr_open参数值,会导致用户无法正常登录该实例
# 如果只是临时增加文件描述符的数量,只要执行echo 1048576 > /proc/sys/fs/nr_open
fs.nr_open = 1048576
# Tcp网络优化,并发连接优化
net.core.somaxconn = 32768
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_syn_backlog = 16384
# 端口使用范围
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_wmem = 4096 87380 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_mem = 786432 2097152 3145728执行sysctl -p刷新
设置sysctl vm.overcommit_memory=1是一种常见的方法。这个参数的含义是,当内存不足时,内核将允许进程继续申请内存,直到申请的总内存超过系统物理内存和swap空间的总和,这样就可以避免在申请内存时出现错误。
hard nofile参数值不可大于/proc/sys/fs/nr_open参数值,若nofile参数值大于nr_open参数值,则可能导致用户无法正常登录该实例。
设置服务的最大文件句柄
编辑修改 /etc/systemd/system.conf:
DefaultLimitNOFILE=1048576设置用户的最大文件句柄、最大文件句柄数
编辑修改 /etc/security/limits.conf:
- 原来:
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535- 修改后:
# 所有用户设置软限制/硬限制为最多可以打开1048576个文件
# 注意,若nofile参数值大于nr_open参数值,会导致用户无法正常登录该实例
* soft nofile 1048576
* hard nofile 1048576
# 所有用户设置进程数的软限制/硬限制为1048576
* soft nproc 1048576
* hard nproc 1048576对比(不执行)
临时会话最大文件句柄(可不执行)
ulimit -n 1048576
此为永久性会话最大文件句柄配置
* soft nofile 1048576
* hard nofile 1048576
重启服务器
reboot重启后查看之前配置是否生效
sysctl -a这边可以看到fs.file-max = 1048576,说明已经生效
设置如果出问题,可以工单联系阿里工程师
设置如果出问题导致无法重启,可以工单联系阿里工程师
也可以通过将磁盘挂载成数据盘解决
https://help.aliyun.com/zh/ecs/how-do-i-restore-system-disk-data
另外,并不是说执行以上配置,您就一定可以让你的服务器支撑超过65536个tcp连接,跟服务器配置也有关系,这边实际碰到阿里云t5c1m2型号cpu,2核8GB内存,6万多就会发生问题,后面升级c7型号cpu,目前测试可以支撑16万纯连接(意思是只连接与心跳[120s]),如果加上客户端tps=400/s消息的话,建议15万以下,比较保守的建议是12万。
作者:一叶火 创建时间:2024-03-19 14:50
最后编辑:一叶火 更新时间:2024-12-25 15:33
最后编辑:一叶火 更新时间:2024-12-25 15:33