轉(zhuǎn)自:http://my.oschina.net/chenzhuo/blog/150200?p=2#comments
根據(jù)系統(tǒng)內(nèi)存64G估算單臺(tái)tengine做反向代理最高支持72萬(wàn)連接。為了驗(yàn)證達(dá)到該連接數(shù)時(shí)系統(tǒng)穩(wěn)定運(yùn)行,進(jìn)行壓測(cè),先驗(yàn)證nginx與client建立72萬(wàn)連接時(shí)性能(不轉(zhuǎn)發(fā))。
關(guān)閉超線程,12核CPU對(duì)應(yīng)12個(gè)nginx worker進(jìn)程,每個(gè)進(jìn)程worker_connections為60000,且關(guān)閉accept_mutex。前端LVS做FNAT模式轉(zhuǎn)發(fā),開synproxy。
1. Client端建立連接數(shù)小于proxy上限
7個(gè)client,每個(gè)client 10個(gè)進(jìn)程對(duì)應(yīng)不同vip,每個(gè)進(jìn)程建立并維持9000個(gè)idle連接。共63萬(wàn)并發(fā)連接。
最大并發(fā)連接 | 最大CPU利用率 | 最大內(nèi)存占用 | MaxTengineMem | MaxSocketMem |
625.0K | 99.33% | 4.0G | 517M | 388M |
18:19:42:
如圖,從18:19:42開始,Client端發(fā)起建立連接過程,CPU占用率提高,內(nèi)存占用增加(1.4G-3.8G)
每個(gè)連接占用內(nèi)存2.4G/630000 = 3.99KB(4KB)
18:19:51:
63W個(gè)連接建立完畢(CPS=7萬(wàn)),CPU占用率下降趨于0,內(nèi)存穩(wěn)定在3.8G。
18:20:42:
Tengine對(duì)client空閑TCP連接超時(shí)為60s,主動(dòng)斷開連接,出現(xiàn)TimeWait連接。同時(shí)Client端收到主動(dòng)斷鏈后,繼續(xù)發(fā)起連接建立過程以便維持期望的連接數(shù),CPU利用率增加,同時(shí)內(nèi)存占用出現(xiàn)尖峰。
18:20:44:
TimeWait連接增加到180000,超過net.ipv4.tcp_max_tw_buckets = 180000,系統(tǒng)日志中出現(xiàn):
18:20:44 xxx kernel: : [94657.274380] TCP: time wait bucket table overflow
18:20:52:
orphan sockets達(dá)到131110,超過net.ipv4.tcp_max_orphans = 131072,系統(tǒng)日志中報(bào)Out of socket memory
18:20:54 xxx kernel: : [94667.682404] Out of socket memory
18:20:54 xxx kernel: : [94667.682414] TCP: too many of orphaned sockets
2. Client端建立連接數(shù)超過proxy上限
7個(gè)client,每個(gè)client 10個(gè)進(jìn)程對(duì)應(yīng)不同vip,每個(gè)進(jìn)程建立并維持11萬(wàn)個(gè)idle連接。共請(qǐng)求建立77萬(wàn)并發(fā)連接。
最大并發(fā)連接 | 最大CPU利用率 | 最大內(nèi)存占用 | MaxTengineMem | MaxSocketMem |
720.0K | 99.42% | 4.4G | 517M | 388M |
17:01:52:
開始建立連接。
17:02:01:
72W個(gè)連接建立完畢(CPS=8萬(wàn)),由Nginx上限為72W,新建立的連接被主動(dòng)斷連,出現(xiàn)大量TimeWait狀態(tài)連接(17:01:59開始),TimeWait連接達(dá)到180000已經(jīng)超過了net.ipv4.tcp_max_tw_buckets = 180000,系統(tǒng)日志中出現(xiàn):
17:02:01 slbv2test04.cm3 kernel: : [89937.009770] TCP: time wait bucket table overflow
17:02:01-17:02:13:
這13秒內(nèi),系統(tǒng)1分鐘load由0.8迅速增加到4,tsar監(jiān)控?zé)o數(shù)據(jù)。
這個(gè)過程,Client端與nginx建立連接,nginx達(dá)到72W上限,主動(dòng)斷開新建立連接,出現(xiàn)大量TimeWait狀態(tài)連接,client達(dá)不到需要建立的連接數(shù),繼續(xù)鍵連接,于是達(dá)tw_buckets上限。
17:02:52:
Tengine對(duì)client空閑TCP連接超時(shí)為60s,主動(dòng)斷開連接,出現(xiàn)TimeWait連接。同時(shí)net.ipv4.tcp_tw_timeout = 60,之前的TimeWait連接也逐步減少。
需要評(píng)估的是:
net.ipv4.tcp_max_tw_buckets = 180000
net.ipv4.tcp_tw_timeout = 60
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 131072
這兩個(gè)取值是否仍然安全。在client請(qǐng)求達(dá)到上限時(shí),會(huì)帶來大量負(fù)載,機(jī)器hang風(fēng)險(xiǎn)。
聯(lián)系客服