創(chuàng)建TCP連接的限制

1.?端口號(hào)限制?

首先,不存在由于端口號(hào)限制 65535 個(gè)的說(shuō)法,因?yàn)槟繕?biāo)端的ip和端口是無(wú)限的。

當(dāng)然, Linux 對(duì)可使用的端口范圍是有具體限制的,具體可以用如下命令查看:

[root]#?cat?/proc/sys/net/ipv4/ip_local_port_range?

1024?65000

這個(gè)限制可以 vim /etc/sysctl.conf 這個(gè)文件進(jìn)行修改,我們?cè)谶@個(gè)文件里添加一行記錄:

net.ipv4.ip_local_port_range?=?60000?60009

保存好后執(zhí)行 sysctl -p /etc/sysctl.conf 使其生效。


2.?文件描述符的限制?

系統(tǒng)級(jí):當(dāng)前系統(tǒng)可打開(kāi)的最大數(shù)量,通過(guò) cat /proc/sys/fs/file-max 查看

用戶級(jí):指定用戶可打開(kāi)的最大數(shù)量,通過(guò) cat /etc/security/limits.conf 查看

進(jìn)程級(jí):?jiǎn)蝹€(gè)進(jìn)程可打開(kāi)的最大數(shù)量,通過(guò) cat /proc/sys/fs/nr_open 查看


[root?~]#?cat?/proc/sys/fs/file-max

100000

[root?~]#?cat?/proc/sys/fs/nr_open

100000

[root?~]#?cat?/etc/security/limits.conf

...

*?soft?nproc?100000

*?hard?nproc?100000

修改單個(gè)進(jìn)程可打開(kāi)的最大文件描述符限制為100,可以這樣:

echo?100?>?/proc/sys/fs/nr_open

理論上文件描述符可以設(shè)置的足夠大。


3. 線程數(shù)的限制?

每建一個(gè)TCP連接就創(chuàng)建一個(gè)線程的方式,是最傳統(tǒng)的多線程并發(fā)模型,早期的操作系統(tǒng)也只支持這種方式。

?C10K?問(wèn)題: 當(dāng)服務(wù)器連接數(shù)達(dá)到 1 萬(wàn)且每個(gè)連接都需要消耗一個(gè)線程資源時(shí),操作系統(tǒng)就會(huì)不停地忙于線程的上下文切換,最終導(dǎo)致系統(tǒng)崩潰。

但是:

現(xiàn)在的操作系統(tǒng)都支持 IO 多路復(fù)用的方式,簡(jiǎn)單說(shuō)就是一個(gè)線程可以管理多個(gè) TCP 連接的資源,這樣就可以用少量的線程來(lái)管理大量的 TCP 連接了。


4.?內(nèi)存的限制?

這個(gè)錯(cuò)誤叫內(nèi)存溢出,每個(gè)TCP連接本身,以及這個(gè)連接所用到的緩沖區(qū),都是需要占用一定內(nèi)存的



5.?CPU的限制?


6. 總結(jié)一下,創(chuàng)建tcp連接需要的資源:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容