幫助中心
其他
一臺(tái)大帶寬服務(wù)器最大能支持多少條TCP連接
2022-12-05 17:50:41

大帶寬服務(wù)器最大能支持多少條TCP連接

一、一臺(tái)服務(wù)器最大能打開(kāi)的文件數(shù)

1、限制參數(shù)

我們知道在Linux中一切皆文件,那么一臺(tái)服務(wù)器最大能打開(kāi)多少個(gè)文件呢?Linux上能打開(kāi)的最大文件數(shù)量受三個(gè)參數(shù)影響,分別是:

●?fs.file-max (系統(tǒng)級(jí)別參數(shù)):該參數(shù)描述了整個(gè)系統(tǒng)可以打開(kāi)的最大文件數(shù)量。但是root用戶不會(huì)受該參數(shù)限制(比如:現(xiàn)在整個(gè)系統(tǒng)打開(kāi)的文件描述符數(shù)量已達(dá)到fs.file-max ,此時(shí)root用戶仍然可以使用ps、kill等命令或打開(kāi)其他文件描述符)

●?soft nofile(進(jìn)程級(jí)別參數(shù)):限制單個(gè)進(jìn)程上可以打開(kāi)的最大文件數(shù)。只能在Linux上配置一次,不能針對(duì)不同用戶配置不同的值

●?fs.nr_open(進(jìn)程級(jí)別參數(shù)):限制單個(gè)進(jìn)程上可以打開(kāi)的最大文件數(shù)??梢葬槍?duì)不同用戶配置不同的值

這三個(gè)參數(shù)之間還有耦合關(guān)系,所以配置值的時(shí)候還需要注意以下三點(diǎn):

1.?如果想加大soft nofile,那么hard nofile參數(shù)值也需要一起調(diào)整。如果因?yàn)閔ard nofile參數(shù)值設(shè)置的低,那么soft nofile參數(shù)的值設(shè)置的再高也沒(méi)有用,實(shí)際生效的值會(huì)按照二者最低的來(lái)。

2.?如果增大了hard nofile,那么fs.nr_open也都需要跟著一起調(diào)整(fs.nr_open參數(shù)值一定要大于hard nofile參數(shù)值)。如果不小心把hard nofile的值設(shè)置的比f(wàn)s.nr_open還大,那么后果比較嚴(yán)重。會(huì)導(dǎo)致該用戶無(wú)法登錄,如果設(shè)置的是*,那么所有用戶都無(wú)法登錄

3.?如果加大了fs.nr_open,但是是用的echo "xxx" > ../fs/nr_open命令來(lái)修改的fs.nr_open的值,那么剛改完可能不會(huì)有問(wèn)題,但是只要機(jī)器一重啟,那么之前通過(guò)echo命令設(shè)置的fs.nr_open值便會(huì)失效,用戶還是無(wú)法登錄。所以非常不建議使用echo的方式修改內(nèi)核參數(shù)!??!

2、調(diào)整服務(wù)器能打開(kāi)的最大文件數(shù)示例

假設(shè)想讓進(jìn)程可以打開(kāi)100萬(wàn)個(gè)文件描述符,這里用修改conf文件的方式給出一個(gè)建議。如果日后工作里有類似的需求可以作為參考。

●?vim /etc/sysctl.conf

●?fs.file-max=1100000 // 系統(tǒng)級(jí)別設(shè)置成110萬(wàn),多留點(diǎn)buffer fs.nr_open=1100000 // 進(jìn)程級(jí)別也設(shè)置成110萬(wàn),因?yàn)橐WC比 hard nofile大 復(fù)制代碼使上面的配置生效sysctl -p

●?vim /etc/security/limits.conf

// 用戶進(jìn)程級(jí)別都設(shè)置成100完 soft nofile 1000000 hard nofile 1000000 復(fù)制代碼二、一臺(tái)服務(wù)器最大能支持多少連接

我們知道TCP連接,從根本上看其實(shí)就是client和server端在內(nèi)存中維護(hù)的一組【socket內(nèi)核對(duì)象】(這里也對(duì)應(yīng)著TCP四元組:源IP、源端口、目標(biāo)IP、目標(biāo)端口),他們只要能夠找到對(duì)方,那么就算是一條連接。那么一臺(tái)服務(wù)器最大能建立多少條連接呢?

●?由于TCP連接本質(zhì)上可以理解為是client-server端的一對(duì)socket內(nèi)核對(duì)象,那么從理論上將應(yīng)該是【2^32 (ip數(shù)) * 2^16 (端口數(shù))】條連接(約等于兩百多萬(wàn)億)

●?但是實(shí)際上由于受其他軟硬件的影響,我們一臺(tái)服務(wù)器不可能能建立這么多連接(主要是受CPU和內(nèi)存限制)。

如果只以ESTABLISH狀態(tài)的連接來(lái)算(這些連接只是建立,但是不收發(fā)數(shù)據(jù)也不處理相關(guān)的業(yè)務(wù)邏輯)那么一臺(tái)服務(wù)器最大能建立多少連接呢?以一臺(tái)4GB內(nèi)存的服務(wù)器為例!

●?這種情況下,那么能建立的連接數(shù)量主要取決于【內(nèi)存的大小】(因?yàn)槿绻牵〦STABLISH狀態(tài)的空閑連接,不會(huì)消耗CPU(雖然有TCP保活包傳輸,但這個(gè)影響非常小,可以忽略不計(jì))

●?我們知道一條ESTABLISH狀態(tài)的連接大約消耗【3.3KB內(nèi)存】,那么通過(guò)計(jì)算得知一臺(tái)4GB內(nèi)存的服務(wù)器,【可以建立100w+的TCP連接】(當(dāng)然這里只是計(jì)算所有的連接都只建立連接但不發(fā)送和處理數(shù)據(jù)的情況,如果真實(shí)場(chǎng)景中有數(shù)據(jù)往來(lái)和處理(數(shù)據(jù)接收和發(fā)送都需要申請(qǐng)內(nèi)存,數(shù)據(jù)處理便需要CPU),那便會(huì)消耗更高的內(nèi)存以及占用更多的CPU,并發(fā)不可能達(dá)到100w+)

上面討論的都是進(jìn)建立連接的理想情況,在現(xiàn)實(shí)中如果有頻繁的數(shù)據(jù)收發(fā)和處理(比如:壓縮、加密等),那么一臺(tái)服務(wù)器能支撐1000連接都算好的了,所以一臺(tái)服務(wù)器能支撐多少連接還要結(jié)合具體的場(chǎng)景去分析,不能光靠理論值去算。拋開(kāi)業(yè)務(wù)邏輯單純的談并發(fā)沒(méi)有太大的實(shí)際意義。

服務(wù)器的開(kāi)銷大頭往往并不是連接本身,而是每條連接上的數(shù)據(jù)收發(fā),以及請(qǐng)求業(yè)務(wù)邏輯處理?。?!

三、一臺(tái)客戶端機(jī)器最多能發(fā)起多少條連接

我們知道客戶端每和服務(wù)端建立一個(gè)連接便會(huì)消耗掉client端一個(gè)端口。一臺(tái)機(jī)器的端口范圍是【0 ~ 65535】,那么是不是說(shuō)一臺(tái)client機(jī)器最多和一臺(tái)服務(wù)端機(jī)器建立65535個(gè)連接呢(這65535個(gè)端口里還有很多保留端口,可用端口可能只有64000個(gè)左右)?

由TCP連接的四元組特性可知,只要四元組里某一個(gè)元素不同,那么就認(rèn)為這是不同的TCP連接。所以需要分情況討論:

●?【情況一】、如果一臺(tái)client僅有一個(gè)IP,server端也僅有一個(gè)IP并且僅啟動(dòng)一個(gè)程序,監(jiān)聽(tīng)一個(gè)端口的情況下,client端和這臺(tái)server端最大可建立的連接條數(shù)就是 65535 個(gè)。 因?yàn)樵碔P固定,目標(biāo)IP和端口固定,四元組中唯一可變化的就是【源端口】,【源端口】的可用范圍又是【0 ~ 65535】,所以一臺(tái)client機(jī)器最大能建立65535個(gè)連接

熱門文章換一批
新客優(yōu)惠
特價(jià) 酷睿i3系列
性價(jià)比熱銷推薦,年銷量第一
1180/月起
USA-IDC為您提供免備案服務(wù)器 0元試用
立即聯(lián)系在線客服,即可申請(qǐng)免費(fèi)產(chǎn)品試用服務(wù)
立即申請(qǐng)