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連接需要的資源:
