IT系統(tǒng)運(yùn)維-最大TCP連接數(shù)
| 2020-05-01 19:46:38 標(biāo)簽:
對于業(yè)務(wù)服務(wù)器來說,IT系統(tǒng)運(yùn)維會經(jīng)常被問到服務(wù)器的最大并發(fā)連接數(shù),最大吞吐量等負(fù)載數(shù)據(jù)信息。以此來確認(rèn)業(yè)務(wù)情況。下面就這個(gè)問題跟大家討論。供廣大IT系統(tǒng)運(yùn)維參考。
啟動線程數(shù):
啟動線程數(shù)=【任務(wù)執(zhí)行時(shí)間/(任務(wù)執(zhí)行時(shí)間-IO等待時(shí)間)】*CPU內(nèi)核數(shù)
最佳啟動線程數(shù)和CPU內(nèi)核數(shù)量成正比,和IO阻塞時(shí)間成反比。如果任務(wù)都是CPU計(jì)算型任務(wù),那么線程數(shù)最多不超過CPU內(nèi)核數(shù),因?yàn)閱釉俣嗑€程,CPU也來不及調(diào)度;相反如果是任務(wù)需要等待磁盤操作,網(wǎng)絡(luò)響應(yīng),那么多啟動線程有助于提高任務(wù)并發(fā)度,提高系統(tǒng)吞吐能力,改善系統(tǒng)性能。
單機(jī)最大tcp連接數(shù)
在tcp應(yīng)用中,server事先在某個(gè)固定端口監(jiān)聽,client主動發(fā)起連接,經(jīng)過三路握手后建立tcp連接。那么對單機(jī),其最大并發(fā)tcp連接數(shù)是多少?如何標(biāo)識一個(gè)TCP連接
在確定最大連接數(shù)之前,先來看看系統(tǒng)如何標(biāo)識一個(gè)tcp連接。系統(tǒng)用一個(gè)4四元組來唯一標(biāo)識一個(gè)TCP連接:{local ip, local port,remote ip,remote port}。
client最大tcp連接數(shù)
client每次發(fā)起tcp連接請求時(shí),除非綁定端口,通常會讓系統(tǒng)選取一個(gè)空閑的本地端口(local port),該端口是獨(dú)占的,不能和其他tcp連接共享。tcp端口的數(shù)據(jù)類型是unsigned short,因此本地端口個(gè)數(shù)最大只有65536,端口0有特殊含義,不能使用,這樣可用端口最多只有65535,所以在全部作為client端的情況下,最大tcp連接數(shù)為65535,這些連接可以連到不同的server ip。
server最大tcp連接數(shù)
server通常固定在某個(gè)本地端口上監(jiān)聽,等待client的連接請求。不考慮地址重用(unix的SO_REUSEADDR選項(xiàng))的情況下,即使server端有多個(gè)ip,本地監(jiān)聽端口也是獨(dú)占的,因此server端tcp連接4元組中只有remote ip(也就是client ip)和remote port(客戶端port)是可變的,因此最大tcp連接為客戶端ip數(shù)×客戶端port數(shù),對IPV4,不考慮ip地址分類等因素,最大tcp連接數(shù)約為2的32次方(ip數(shù))×2的16次方(port數(shù)),也就是server端單機(jī)最大tcp連接數(shù)約為2的48次方。
實(shí)際的tcp連接數(shù)
上面給出的是理論上的單機(jī)最大連接數(shù),在實(shí)際環(huán)境中,受到機(jī)器資源、操作系統(tǒng)等的限制,特別是sever端,其最大并發(fā)tcp連接數(shù)遠(yuǎn)不能達(dá)到理論上限。在unix/linux下限制連接數(shù)的主要因素是內(nèi)存和允許的文件描述符個(gè)數(shù)(每個(gè)tcp連接都要占用一定內(nèi)存,每個(gè)socket就是一個(gè)文件描述符),另外1024以下的端口通常為保留端口。在默認(rèn)2.6內(nèi)核配置下,經(jīng)過試驗(yàn),每個(gè)socket占用內(nèi)存在15~20k之間。
影響一個(gè)socket占用內(nèi)存的參數(shù)包括:
rmem_max
wmem_max
tcp_rmem
tcp_wmem
tcp_mem
grep skbuff /proc/slabinfo
對server端,通過增加內(nèi)存、修改最大文件描述符個(gè)數(shù)等參數(shù),單機(jī)最大并發(fā)TCP連接數(shù)超過10萬 是沒問題的,國外 Urban Airship 公司在產(chǎn)品環(huán)境中已做到 50 萬并發(fā) 。在實(shí)際應(yīng)用中,對大規(guī)模網(wǎng)絡(luò)應(yīng)用,還需要考慮C10K 問題。曾幾何時(shí)我們還在尋求網(wǎng)絡(luò)編程中C10K問題的解決方案,但是現(xiàn)在從硬件和操作系統(tǒng)支持來看單臺服務(wù)器支持上萬并發(fā)連接已經(jīng)沒有多少挑戰(zhàn)性了。

我們先假設(shè)單臺服務(wù)器最多只能支持萬級并發(fā)連接,其實(shí)對絕大多數(shù)應(yīng)用來說已經(jīng)遠(yuǎn)遠(yuǎn)足夠了,但是對于一些擁有很大用戶基數(shù)的互聯(lián)網(wǎng)公司,往往面臨的并發(fā)連接數(shù)是百萬,千萬,甚至騰訊的上億(注:QQ默認(rèn)用的UDP協(xié)議)。雖然現(xiàn)在的集群,分布式技術(shù)可以為我們將并發(fā)負(fù)載分擔(dān)在多臺服務(wù)器上,那我們只需要擴(kuò)展出數(shù)十臺電腦就可以解決問題,但是我們更希望能更大的挖掘單臺服務(wù)器的資源,先努力垂直擴(kuò)展,再進(jìn)行水平擴(kuò)展,這樣可以有效的節(jié)省服務(wù)器相關(guān)的開支(硬件資源,機(jī)房,運(yùn)維,電力其實(shí)也是一筆不小的開支)。
以上內(nèi)容由北京艾銻無限科技發(fā)展有限公司整理