91精品色婷,日韩少妇中出,国产 精一区二区三,欧美视频精品在线二区,婷婷久久日韩欧美,亚洲天堂性爱视频,亚洲香蕉一区,国产自产观看精品一区,日本 大胆成人

設(shè)置
  • 日夜間
    隨系統(tǒng)
    淺色
    深色
  • 主題色

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

開發(fā)內(nèi)功修煉 2022/10/1 20:19:17 責(zé)編:子非

本文來自微信公眾號(hào):開發(fā)內(nèi)功修煉 (ID:kfngxl),作者:張彥飛 allen

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

在網(wǎng)絡(luò)開發(fā)中,我發(fā)現(xiàn)有很多同學(xué)對(duì)一個(gè)基礎(chǔ)問題始終是沒有徹底搞明白。那就是一臺(tái)服務(wù)器最大究竟能支持多少個(gè)網(wǎng)絡(luò)連接?我想我有必要單獨(dú)發(fā)一篇文章來好好說一下這個(gè)問題。

很多同學(xué)看到這個(gè)問題的第一反應(yīng)是 65535。原因是:“聽說端口號(hào)最多有 65535 個(gè),那長連接就最多保持 65535 個(gè)了”。是這樣的嗎?還有的人說:“應(yīng)該受 TCP 連接里四元組的空間大小限制,算起來是 200 多萬億個(gè)!”

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

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

"TCP 連接四元組是源 IP 地址、源端口、目的 IP 地址和目的端口。任意一個(gè)元素發(fā)生了改變,那么就代表的是一條完全不同的連接了。拿我的 Nginx 舉例,它的端口是固定使用 80。另外我的 IP 也是固定的,這樣目的 IP 地址、目的端口都是固定的。剩下源 IP 地址、源端口是可變的。所以理論上我的 Nginx 上最多可以建立 2 的 32 次方(ip 數(shù))×2 的 16 次方(port 數(shù))個(gè)連接。這是兩百多萬億的一個(gè)大數(shù)字!!"

"進(jìn)程每打開一個(gè)文件(linux 下一切皆文件,包括 socket),都會(huì)消耗一定的內(nèi)存資源。如果有不懷好心的人啟動(dòng)一個(gè)進(jìn)程來無限的創(chuàng)建和打開新的文件,會(huì)讓服務(wù)器崩潰。所以 linux 系統(tǒng)出于安全角度的考慮,在多個(gè)位置都限制了可打開的文件描述符的數(shù)量,包括系統(tǒng)級(jí)、用戶級(jí)、進(jìn)程級(jí)。這三個(gè)限制的含義和修改方式如下:"

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

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

進(jìn)程級(jí):單個(gè)進(jìn)程可打開的最大數(shù)量,通過 fs.nr_open 參數(shù)可修改

"我的接收緩存區(qū)大小是可以配置的,通過 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 之多。也就是說你們有數(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ù)端百萬連接達(dá)成記

“準(zhǔn)備啥呢,還記得前面說過 Linux 對(duì)最大文件對(duì)象數(shù)量有限制,所以要想完成這個(gè)實(shí)驗(yàn),得在用戶級(jí)、系統(tǒng)級(jí)、進(jìn)程級(jí)等位置把這個(gè)上限加大。我們實(shí)驗(yàn)?zāi)康氖?100W,這里都設(shè)置成 110W,這個(gè)很重要!因?yàn)榈帽WC做實(shí)驗(yàn)的時(shí)候其它基礎(chǔ)命令例如 ps,vi 等是可用的?!?/p>

活動(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 加起來也只剩下 100 多 MB 了:

$ cat /proc/meminfo
MemTotal:        3922956 kB
MemFree:           96652 kB
MemAvailable:       6448 kB
Buffers:           44396 kB

Slab:          3241244KB kB

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

結(jié)語

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

學(xué)習(xí)是一件痛苦的事情,尤其咱們號(hào)里很多讀者朋友都是工作滿一天了再來看我的技術(shù)號(hào)的文章的。我一直都在琢磨到底怎么樣組織技術(shù)內(nèi)容形式,能讓大家理解起來更能省一點(diǎn)腦細(xì)胞呢。這篇服務(wù)器的最大并發(fā)數(shù)的文章是早就想發(fā)的,但是寫了兩三個(gè)版本都不滿意。今天終于想出了一種讓大家更容易理解的方式,算過了自己這關(guān)了。

廣告聲明:文內(nèi)含有的對(duì)外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時(shí)間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。

相關(guān)文章

關(guān)鍵詞:Linuxlinux

軟媒旗下網(wǎng)站: IT之家 最會(huì)買 - 返利返現(xiàn)優(yōu)惠券 iPhone之家 Win7之家 Win10之家 Win11之家

軟媒旗下軟件: 軟媒手機(jī)APP應(yīng)用 魔方 最會(huì)買 要知

迁西县| 大足县| 沁源县| 南充市| 永清县| 黄石市| 许昌县| 手游| 福州市| 罗源县| 宁德市| 凌源市| 邹平县| 亚东县| 长子县| 枣强县| 澄江县| 纳雍县| 游戏| 那坡县| 苏尼特右旗| 新竹县| 贡觉县| 旅游| 乌鲁木齐市| 乌海市| 井研县| 城固县| 射阳县| 长子县| 深圳市| 泗水县| 松潘县| 项城市| 丰顺县| 新河县| 旬邑县| 巫山县| 玉溪市| 鄱阳县| 石门县|