文件句柄數(shù)限制###
兩個(gè)事實(shí):1)*nix系統(tǒng)中,一切都用文件來(lái)描述。2)操作系統(tǒng)會(huì)對(duì)單個(gè)進(jìn)程打開(kāi)的最大“文件”數(shù)量進(jìn)行控制。
結(jié)論:你的模型再牛逼鹃锈,因?yàn)檫@個(gè)限制,你也只能打開(kāi)操作系統(tǒng)規(guī)定的那些個(gè)連接瞧预。
- 單個(gè)進(jìn)程的限制
ulimit命令:ulimit -n 在linux返回1024屎债,最多打開(kāi)1024個(gè)文件寨蹋,修改這個(gè)值用ulimit -SHn <number>來(lái)做。永久修改
請(qǐng)加入到.bashrc中扔茅。- 操作系統(tǒng)范圍內(nèi)總數(shù)的限制
/etc/sysctl.conf
fs.file-max = 1000000
net.ipv4.conntrack_max=1000000
net.ipv4.netfilter.ip_conntrack_max = 1000000
上述兩個(gè)值待查閱資料更新
端口號(hào)限制###
容易混淆的點(diǎn):accept返回的是文件描述符,而不是端口號(hào)秸苗,服務(wù)器來(lái)講召娜,你accept多少連接,你的客戶都跟你bind的那一個(gè)端口進(jìn)行通信惊楼,所以服務(wù)器能接受的最大連接數(shù)(不考慮參數(shù)限制)玖瘸,是客戶端ip數(shù) × 客戶端端口數(shù),也就是2^32 × 2^16 = 2^48檀咙,這是服務(wù)器理論上能接受的最大連接數(shù)雅倒,跟你本地支持多少個(gè)端口沒(méi)有關(guān)系。
覺(jué)得很有道理的TCP調(diào)優(yōu)###
- 增大Tcp的初始擁塞窗口:有很多突發(fā)性(而且很有可能傳輸大量數(shù)據(jù))的短連接弧可,這是特別重要的一個(gè)優(yōu)化蔑匣,TCP還在慢啟動(dòng),數(shù)據(jù)傳輸就結(jié)束了棕诵。
落地改法:網(wǎng)上介紹的好像只有改內(nèi)核裁良,并在內(nèi)核中通過(guò)/proc文件系統(tǒng)控制這個(gè)值
- 慢啟動(dòng)重啟:連接空閑時(shí),禁用慢啟動(dòng)重啟校套,將會(huì)顯著改善突發(fā)性傳送數(shù)據(jù)的TCP長(zhǎng)連接的性能价脾。
$> sysctl -w net.ipv4.tcp_slow_start_after_idle=0
- 啟動(dòng)窗口縮放將增大最大接收窗口大小。
$> sysctl -w net.ipv4.tcp_slow_start_after_idle=0
- TCP快速打開(kāi):允許第一個(gè)TCP SYN分組發(fā)送應(yīng)用數(shù)據(jù)笛匙,這需要服務(wù)器和客戶共同支持侨把。