文章目录
本文主要用于,MQTT服务系统参数调优
如何让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空间的总和,这样就可以避免在申请内存时出现错误。
[warning] 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 4核8GB,目前测试可以支撑16万纯连接(意思是只连接与心跳[120s]),如果加上客户端tps=400/s消息的话,建议15万以下,比较保守的建议是12万。另外,2核4GB的,测试可以支撑12万纯连接跑30分钟才会出问题,加消息够呛,不考虑。
PS:在sysctl.conf文件中定义的内核参数值,如果在文件中多次出现,以最后一次定义的值为准。
写在最后: 微信搜索【蜜蜂网盘搜so】小程序,万部短剧、各种资源任意搜索