<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          漫畫 | 一臺(tái)Linux服務(wù)器最多能支撐多少個(gè)TCP連接?

          共 2512字,需瀏覽 6分鐘

           ·

          2021-06-03 21:28

          困惑很多人的并發(fā)問(wèn)題

          在網(wǎng)絡(luò)開(kāi)發(fā)中,我發(fā)現(xiàn)有很多同學(xué)對(duì)一個(gè)基礎(chǔ)問(wèn)題始終是沒(méi)有徹底搞明白。

          那就是一臺(tái)服務(wù)器最大究竟能支持多少個(gè)網(wǎng)絡(luò)連接?

          很多同學(xué)看到這個(gè)問(wèn)題的第一反應(yīng)是65535。原因是:“聽(tīng)說(shuō)端口號(hào)最多有65535個(gè),那長(zhǎng)連接就最多保持65535個(gè)了”。是這樣的嗎?

          還有的人說(shuō):“應(yīng)該受TCP連接里四元組的空間大小限制,算起來(lái)是200多萬(wàn)億個(gè)!”

          如果你對(duì)這個(gè)問(wèn)題也是理解的不夠徹底,那么今天講個(gè)故事講給你聽(tīng)!

          一次關(guān)于服務(wù)器端并發(fā)的聊天

          TCP連接四元組是源IP地址、源端口、目的IP地址和目的端口。任意一個(gè)元素發(fā)生了改變,那么就代表的是一條完全不同的連接了。

          拿我的Nginx舉例,它的端口是固定使用80。另外我的IP也是固定的,這樣目的IP地址、目的端口都是固定的。剩下源IP地址、源端口是可變的。

          所以理論上我的Nginx上最多可以建立2的32次方(ip數(shù))×2的16次方(port數(shù))個(gè)連接。這是兩百多萬(wàn)億的一個(gè)大數(shù)字?。?/span>

          進(jìn)程每打開(kāi)一個(gè)文件(linux下一切皆文件,包括socket),都會(huì)消耗一定的內(nèi)存資源。如果有不懷好心的人啟動(dòng)一個(gè)進(jìn)程來(lái)無(wú)限的創(chuàng)建和打開(kāi)新的文件,會(huì)讓服務(wù)器崩潰。

          所以linux系統(tǒng)出于安全角度的考慮,在多個(gè)位置都限制了可打開(kāi)的文件描述符的數(shù)量,包括系統(tǒng)級(jí)、用戶級(jí)、進(jìn)程級(jí)。這三個(gè)限制的含義和修改方式如下:

          • 系統(tǒng)級(jí):當(dāng)前系統(tǒng)可打開(kāi)的最大數(shù)量,通過(guò)fs.file-max 參數(shù)可修改

          • 用戶級(jí):指定用戶可打開(kāi)的最大數(shù)量,修改/etc/security/limits.conf

          • 進(jìn)程級(jí):?jiǎn)蝹€(gè)進(jìn)程可打開(kāi)的最大數(shù)量,通過(guò)fs.nr_open參數(shù)可修改

          我的接收緩存區(qū)大小是可以配置的,通過(guò)sysctl命令就可以查看。

          $ sysctl -a | grep rmem
          net.ipv4.tcp_rmem = 4096 87380 8388608
          net.core.rmem_default = 212992
          net.core.rmem_max = 8388608

          其中在tcp_rmem中的第一個(gè)值是你們的TCP連接所需分配的最少字節(jié)數(shù)。該值默認(rèn)是4K,最大的話 8MB 之多。

          也就是說(shuō)你們有數(shù)據(jù)發(fā)送的時(shí)候我需要至少為對(duì)應(yīng)的socket再分配4K內(nèi)存,甚至可能更大。

          TCP分配發(fā)送緩存區(qū)的大小受參數(shù)net.ipv4.tcp_wmem配置影響。

          $ sysctl -a | grep wmem
          net.ipv4.tcp_wmem = 4096 65536 8388608
          net.core.wmem_default = 212992
          net.core.wmem_max = 8388608

          在net.ipv4.tcp_wmem中的第一個(gè)值是發(fā)送緩存區(qū)的最小值,默認(rèn)也是4K。當(dāng)然了如果數(shù)據(jù)很大的話,該緩存區(qū)實(shí)際分配的也會(huì)比默認(rèn)值大。


          服務(wù)端百萬(wàn)連接達(dá)成記


          準(zhǔn)備啥呢,還記得前說(shuō)過(guò)Linux對(duì)最大文件對(duì)象數(shù)量有限制,所以要想完成這個(gè)實(shí)驗(yàn),得在用戶級(jí)、系統(tǒng)級(jí)、進(jìn)程級(jí)等位置把這個(gè)上限加大。

          我們實(shí)驗(yàn)?zāi)康氖?00W,這里都設(shè)置成110W,這個(gè)很重要!因?yàn)榈帽WC做實(shí)驗(yàn)的時(shí)候其它基礎(chǔ)命令例如ps,vi等是可用的。

          活動(dòng)連接數(shù)量確實(shí)達(dá)到了100W:

          $ ss -n | grep ESTAB | wc -l  
          1000024

          當(dāng)前機(jī)器內(nèi)存總共是3.9GB,其中內(nèi)核Slab占用了3.2GB之多。MemFree和Buffers加起來(lái)也只剩下100多MB了:

          $ cat /proc/meminfo
          MemTotal:        3922956 kB
          MemFree:           96652 kB
          MemAvailable:       6448 kB
          Buffers:           44396 kB
          ......
          Slab:          3241244KB kB

          通過(guò)slabtop命令可以查看到densty、flip、sock_inode_cache、TCP四個(gè)內(nèi)核對(duì)象都分別有100W個(gè):


          結(jié)語(yǔ)

          互聯(lián)網(wǎng)后端的業(yè)務(wù)特點(diǎn)之一就是高并發(fā),但是一臺(tái)服務(wù)器最大究竟能支持多少個(gè)TCP連接,這個(gè)問(wèn)題又在困惑著很多同學(xué)。希望今天過(guò)后,你能將這個(gè)問(wèn)題踩在腳下!

          如果您喜歡我的文章、并覺(jué)得它有用,歡迎轉(zhuǎn)發(fā)到你的朋友圈、技術(shù)群,或者哪怕是點(diǎn)個(gè)贊、點(diǎn)個(gè)在看都可以。這將極大地提升我的創(chuàng)作動(dòng)力!

          ··············  END  ··············

          飛哥對(duì)網(wǎng)絡(luò)的理解非常獨(dú)到,而且自成體系。他還編排了一本電子書,內(nèi)容夠不夠牛看看目錄就知道了。

          點(diǎn)擊下方,關(guān)注飛哥的公眾號(hào)「開(kāi)發(fā)內(nèi)功修煉」后臺(tái)回復(fù)「內(nèi)功」即可獲得這本pdf。如果你能把他這本書讀完并理解了,相信你再網(wǎng)絡(luò)上的理解已經(jīng)可以很自信地說(shuō)足夠深入了。

          瀏覽 39
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲无码三级视频 | 国产a片偷拍网站视频 | 色婷婷国产精品秘 免 | 操片免费| 超碰国产在线凹凸 |