linux系统参数
单机支持上万连接,还需要修改系统参数,两个层面,一个是全局的文件句柄,还有一个是单进程的文件句柄,
全局限制
在 Linux 下执行:
cat /proc/sys/fs/file-nr
会打印出类似下面的一行输出:
5100 0 101747
第三个数字 101747 就是当前系统的全局最大打开文件数(Max Open Files), 可以看到, 只有 10 万, 所以, 在这台服务器上无法支持超过10W的连接. 很多系统的这个数值更小, 为了修改这个数值, 用 root 权限修改 /etc/sysctl.conf 文件:
fs.file-max = 1000000 net.ipv4.ip_conntrack_max = 1000000 net.ipv4.netfilter.ip_conntrack_max = 1000000
需要重启系统服务生效:
$ sudo sysctl -p /etc/sysctl.conf
进程限制
执行:
ulimit -n
输出:
1024
说明当前 Linux 系统的每一个进程只能最多打开 1024 个文件. 为了支持更多连接, 你同样需要修改这个限制.
临时修改
ulimit -n 1000000
不过, 如果你不是 root, 可能不能修改超过 1024, 会报错:
-bash: ulimit: open files: cannot modify limit: Operation not permitted
永久修改
编辑 /etc/security/limits.conf 文件, 加入如下行:
# /etc/security/limits.conf work hard nofile 1000000 work soft nofile 1000000
第一列的 work 表示 work 用户, 你可以填 *, 或者 root. 然后保存退出, 重新登录服务器.
https://mp.weixin.qq.com/s/7uem8pLeHu8aeNu7n99NdQ