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

1.?端口號限制?

首先,不存在由于端口號限制 65535 個的說法,因為目標端的ip和端口是無限的。

當然, Linux 對可使用的端口范圍是有具體限制的,具體可以用如下命令查看:

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

1024?65000

這個限制可以 vim /etc/sysctl.conf 這個文件進行修改,我們在這個文件里添加一行記錄:

net.ipv4.ip_local_port_range?=?60000?60009

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


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

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

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

進程級:單個進程可打開的最大數(shù)量,通過 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

修改單個進程可打開的最大文件描述符限制為100,可以這樣:

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

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


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

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

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

但是:

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


4.?內存的限制?

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



5.?CPU的限制?


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

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容