單機支持上萬鏈接,還須要修改系統參數,兩個層面,一個是全局的文件句柄,還有一個是單進程的文件句柄,linux
全侷限制bash
在 Linux 下執行:服務器
cat /proc/sys/fs/file-nrspa
會打印出相似下面的一行輸出:.net
5100 0 101747進程
第三個數字 101747 就是當前系統的全局最大打開文件數(Max Open Files), 能夠看到, 只有 10 萬, 因此, 在這臺服務器上沒法支持超過10W的鏈接. 不少系統的這個數值更小, 爲了修改這個數值, 用 root 權限修改 /etc/sysctl.conf 文件:ip
fs.file-max = 1000000 net.ipv4.ip_conntrack_max = 1000000 net.ipv4.netfilter.ip_conntrack_max = 1000000it
須要重啓系統服務生效:io
$ 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