【 Linux 】单台服务器上并发TCP连接数(转)
單臺服務(wù)器上并發(fā)TCP連接數(shù)
?? ?
問題:一臺服務(wù)器到底能夠支持多少TCP并發(fā)連接呢?
1. 文件描述符限制:
?? ?對于服務(wù)器來說,每一個TCP連接都要占用一個文件描述符,一旦文件描述符使用完,新的連接到來返回給我們的錯誤是"Socket/File:Can't open so many files"?? ???
? ? 這時,你需要明白操作系統(tǒng)可以打開最大文件數(shù)的限制。
?? ??? ?進(jìn)程限制(用戶限制):
?? ??? ??? ?執(zhí)行 ulimit -n 輸出1024,說明對于一個進(jìn)程而言最多只能打開1024個文件,所以你要采用此默認(rèn)配置最多也就可以并發(fā)上千個TCP連接。
?? ??? ??? ?臨時修改:ulimit -n 1000000,但是這種臨時修改只對當(dāng)前登錄的用戶目前使用的環(huán)境有效,系統(tǒng)重啟或用戶退出會就失效。
?? ??? ??? ?永久生效:修改/etc/security/limits.conf 文件:
?? ???? 全局限制:
?? ??? ??? ?執(zhí)行 cat /proc/sys/fs/file-nr ?
?? ??? ??? ??? ?1216?? ?0?? ?187612
?? ??? ??? ??? ?(1) 1216:已經(jīng)分配的文件描述符數(shù)
?? ??? ??? ??? ?(2) 0:已經(jīng)分配但沒有使用的文件描述符數(shù),這里的意思是內(nèi)核分配了1216,然后1216個都用光了,所以“分配了但沒有使用的 句柄數(shù)目” 為 0?
?? ??? ??? ??? ?(3) 187612:最大文件句柄數(shù)
?? ??? ??? ??? ?注意:在kernel2.6 版本中第二項的值總為0,這并不是一個錯誤,它實際上意味著已經(jīng)分配的文件描述符無一浪費(fèi)的都已經(jīng)
?? ??? ??? ??? ?被使用。
?? ??? ??? ??? ?可以通過在/etc/sysctl.conf里定義fs.file-max = 1000000 來調(diào)整最后一個值的大小
?
2. 端口號范圍限制:
?? ?操作系統(tǒng)上端口號1024以下是系統(tǒng)保留的,從1024-65535是用戶使用的,由于沒有tcp連接都要占用一個端口號,所以我們最多可以使用
?? ?60000多個并發(fā)連接,這是對客戶端的理解。
?? ?分析一下:
?? ??? ?(1) 如何標(biāo)識一個TCP連接? 系統(tǒng)用一個4元組來標(biāo)識一個TCP連接:(local ip,local port,remote ip, remote port) 對于accept來說,accept的sock不占新的端口 第一個local ip , local port 代表客戶端的ip地址和端口號。
?? ??? ?而我們作為服務(wù)器實際只是使用了bind這一個端口
?? ??? ?說明端口65535并不是并發(fā)量的限制。
?? ??? ?(2) server最大tcp連接數(shù):server通常固定在某一個本地端口上監(jiān)聽,等待client的連接請求。不考慮地址重用的情況下,即使多個ip
?? ??? ?本地監(jiān)聽端口也是獨(dú)占的。因此server端tcp連接4元組中只有remote ip 和 remote port 是可變的,因此最大tcp連接為
?? ??? ?客戶端ip數(shù) * 客戶端port數(shù)。 對于ipv4,不考慮ip地址等因素,最大tcp連接約為2的32次方(ip數(shù)) * 2的16次方(port數(shù))
?? ??? ?也就是? server端:單機(jī)最大tcp連接數(shù)約為:2的48次方。
問題1:查看文件描述符使用 lsof查看到的句柄數(shù)和/proc/sys/fs/file-nr 值不一樣,為什么?
[root@localhost ~]# lsof | wc -l710[root@localhost ~]# !catcat /proc/sys/fs/file-nr416 0 1000000??? 答案:一個文件可以被多個進(jìn)程打開,lsof所列出來的是每個進(jìn)程所打開的文件,所以lsof的數(shù)值比file-nr要大很正常。
?
問題2:關(guān)于文件句柄到底設(shè)置多大合適?
?? ?查看句柄數(shù)的方法:
?? ???? 這個值在kernel的文檔里意思是file-max一般為內(nèi)存大小(KB)的10%來計算,如果使用shell,可以這樣計算:
?? ??? ?grep -r MemTotal /proc/meminfo | awk '{printf("%d",$2/10)}'? 計算出來的值一般和默認(rèn)最大句柄數(shù)近似。
?
轉(zhuǎn)載于:https://www.cnblogs.com/saryli/p/9821030.html
總結(jié)
以上是生活随笔為你收集整理的【 Linux 】单台服务器上并发TCP连接数(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: P4048 [JSOI2010]冷冻波
- 下一篇: 列了一些自己会但是不怎么精通的编程语言和