<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網易首頁 > 網易號 > 正文 申請入駐

      面試官:一臺服務器最大能支持多少條TCP連接?問倒一大片。。。

      0
      分享至

      Java精選面試題(微信小程序):5000+道面試題和選擇題,真實面經簡歷模版,包含Java基礎、并發(fā)、JVM、線程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架構設計、大廠真題等,在線隨時刷題!

      之前有一位讀者訴苦,有次面試,好不容易(今年行情大家都懂的)熬到到技術終面,誰知道面試官突然放個大招問他:一臺服務器最大能支持多少條 TCP 連接,把他直接給問懵逼了。。。。(請自行腦補那尷尬的場面與氣氛)。

      所以,今天就來討論一下這個問題。

      一. 一臺服務器最大能打開的文件數(shù)

      限制參數(shù)

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

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

      • soft nofile(進程級別參數(shù)):限制單個進程上可以打開的最大文件數(shù)。只能在Linux上配置一次,不能針對不同用戶配置不同的值。

      • fs.nr_open(進程級別參數(shù)):限制單個進程上可以打開的最大文件數(shù)。可以針對不同用戶配置不同的值。

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

      1. 如果想加大soft nofile,那么hard nofile參數(shù)值也需要一起調整。如果因為hard nofile參數(shù)值設置的低,那么soft nofile參數(shù)的值設置的再高也沒有用,實際生效的值會按照二者最低的來。

      2. 如果增大了hard nofile,那么fs.nr_open也都需要跟著一起調整(fs.nr_open參數(shù)值一定要大于hard nofile參數(shù)值)。如果不小心把hard nofile的值設置的比fs.nr_open還大,那么后果比較嚴重。會導致該用戶無法登錄,如果設置的是*,那么所有用戶都無法登錄。

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

      二. 調整服務器能打開的最大文件數(shù)示例

      假設想讓進程可以打開100萬個文件描述符,這里用修改conf文件的方式給出一個建議。如果日后工作里有類似的需求可以作為參考。

      vim /etc/sysctl.conf fs.file-max=1100000 // 系統(tǒng)級別設置成110萬,多留點buffer   fs.nr_open=1100000 // 進程級別也設置成110萬,因為要保證比 hard nofile大

      使上面的配置生效sysctl -p

      vim /etc/security/limits.conf      // 用戶進程級別都設置成100完   soft nofile 1000000   hard nofile 1000000

      三. 一臺服務器最大能支持多少連接

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

      • 由于TCP連接本質上可以理解為是client-server端的一對socket內核對象,那么從理論上將應該是【2^32 (ip數(shù)) * 2^16 (端口數(shù))】條連接(約等于兩百多萬億)。

      • 但是實際上由于受其他軟硬件的影響,我們一臺服務器不可能能建立這么多連接(主要是受CPU和內存限制)。

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

      • 這種情況下,那么能建立的連接數(shù)量主要取決于【內存的大小】(因為如果是)ESTABLISH狀態(tài)的空閑連接,不會消耗CPU(雖然有TCP?;畎鼈鬏?,但這個影響非常小,可以忽略不計)。

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

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

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

      四.一臺客戶端機器最多能發(fā)起多少條連接

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

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

      情況一】、如果一臺client僅有一個IP,server端也僅有一個IP并且僅啟動一個程序,監(jiān)聽一個端口的情況下,client端和這臺server端最大可建立的連接條數(shù)就是 65535 個。

      因為源IP固定,目標IP和端口固定,四元組中唯一可變化的就是【源端口】,【源端口】的可用范圍又是【0 ~ 65535】,所以一臺client機器最大能建立65535個連接。

      情況二】、如果一臺client有多個IP(假設客戶端有 n 個IP),server端僅有一個IP并且僅啟動一個程序,監(jiān)聽一個端口的情況下,一臺client機器最大能建立的連接條數(shù)是:n * 65535 個。

      因為目標IP和端口固定,有 n 個源IP,四元組中可變化的就是【源端口】+ 【源IP】,【源端口】的可用范圍又是【0 ~ 65535】,所以一個IP最大能建立65535個連接,那么n個IP最大就能建立 n * 65535個連接了。

      以現(xiàn)在的技術,給一個client分配多個IP是非常容易的事情,只需要去聯(lián)系你們網管就可以做到。

      情況三】、如果一臺client僅有一個IP,server端也僅有一個IP但是server端啟動多個程序,每個程序監(jiān)聽一個端口的情況下(比如server端啟動了m個程序,監(jiān)聽了m個不同端口),一臺client機器最大能建立的連接數(shù)量為:65535 * m。

      源IP固定,目標IP固定,目標端口數(shù)量為m個,可變化的是源端口,而源端口變化范圍是【0 ~ 65535】,所以一臺client機器最大能建立的TCP連接數(shù)量是 65535 * m個。

      • 其余情況類推,但是客戶端的可用端口范圍一般達不到65535個,受內核參數(shù)net.ipv4.ip_local_port_range限制,如果要修改client所能使用的端口范圍,可以修改這個內核參數(shù)的值。

      • 所以,不光是一臺server端可以接收100w+個TCP連接,一臺client照樣能發(fā)出100w+個連接。

      五. 其他

      • 三次握手里socket的全連接隊列長度由參數(shù)net.core.somaxconn來控制,默認大小是128,當兩臺機器離的非常近,但是建立連接的并發(fā)又非常高時,可能會導致半連接隊列或全連接隊列溢出,進而導致server端丟棄握手包。然后造成client超時重傳握手包(至少1s以后才會重傳),導致三次握手連接建立耗時過長。我們可以調整參數(shù)net.core.somaxconn來增加去按連接隊列的長度,進而減小丟包的影響

      • 有時候我們通過 ctrl + c方式來終止了某個進程,但是當重啟該進程的時候發(fā)現(xiàn)報錯端口被占用,這種問題是因為【操作系統(tǒng)還沒有來得及回收該端口,等一會兒重啟應用就好了】

      • client程序在和server端建立連接時,如果client沒有調用bind方法傳入指定的端口,那么client在和server端建立連接的時候便會自己隨機選擇一個端口來建立連接。一旦我們client程序調用了bind方法傳入了指定的端口,那么client將會使用我們bind里指定的端口來和server建立連接。所以不建議client調用bind方法,bind函數(shù)會改變內核選擇端口的策略

      public static void main(String[] args) throws IOException {       SocketChannel sc = SocketChannel.open();      // 客戶端還可以調用bind方法       sc.bind(new InetSocketAddress("localhost", 9999));       sc.connect(new InetSocketAddress("localhost", 8080));       System.out.println("waiting..........");   }
      • 在Linux一切皆文件,當然也包括之前TCP連接中說的socket。進程打開一個socket的時候需要創(chuàng)建好幾個內核對象,換一句直白的話說就是打開文件對象吃內存,所以Linux系統(tǒng)基于安全角度考慮(比如:有用戶進程惡意的打開無數(shù)的文件描述符,那不得把系統(tǒng)搞奔潰了),在多個位置都限制了可打開的文件描述符的數(shù)量。

      • 內核是通過【hash表】的方式來管理所有已經建立好連接的socket,以便于有請求到達時快速的通過【TCP四元組】查找到內核中對應的socket對象。

      在epoll模型中,通過紅黑樹來管理epoll對象所管理的所有socket,用紅黑樹結構來平衡快速刪除、插入、查找socket的效率。

      六.相關實際問題

      在網絡開發(fā)中,很多人對一個基礎問題始終沒有徹底搞明白,那就是一臺機器最多能支撐多少條TCP連接。不過由于客戶端和服務端對端口使用方式不同,這個問題拆開來理解要容易一些。

      注意,這里說的是客戶端和服務端都只是角色,并不是指某一臺具體的機器。例如對于我們自己開發(fā)的應用程序來說,當他響應客戶端請求的時候,他就是服務端。當他向MySQL請求數(shù)據(jù)的時候,他又變成了客戶端。

      "too many open files" 報錯是怎么回事,該如何解決

      你在線上可能遇到過too many open files這個錯誤,那么你理解這個報錯發(fā)生的原理嗎?如果讓你修復這個錯誤,應該如何處理呢?

      • 因為每打開一個文件(包括socket),都需要消耗一定的內存資源。為了避免個別進程不受控制的打開了過多文件而讓整個服務器奔潰,Linux對打開的文件描述符數(shù)量有限制。如果你的進程觸發(fā)到內核的限制,那么"too many open files" 報錯就產生了。

      • 可以通過修改fs.file-max 、soft nofile、fs.nr_open這三個參數(shù)的值來修改進程能打開的最大文件描述符數(shù)量。

      需要注意這三個參數(shù)之間的耦合關系!

      一臺服務端機器最大究竟能支持多少條連接

      因為這里要考慮的是最大數(shù),因此先不考慮連接上的數(shù)據(jù)收發(fā)和處理,僅考慮ESTABLISH狀態(tài)的空連接。那么一臺服務端機器上最大可以支持多少條TCP連接?這個連接數(shù)會受哪些因素的影響?

      • 在不考慮連接上數(shù)據(jù)的收發(fā)和處理的情況下,僅考慮ESTABLISH狀態(tài)下的空連接情況下,一臺服務器上最大可支持的TCP連接數(shù)量基本上可以說是由內存大小來決定的。

      • 四元組唯一確定一條連接,但服務端可以接收來自任意客戶端的請求,所以根據(jù)這個理論計算出來的數(shù)字太大,沒有實際意義。另外文件描述符限制其實也是內核為了防止某些應用程序不受限制的打開【文件句柄】而添加的限制。這個限制只要修改幾個內核參數(shù)就可以加大。

      • 一個socket大約消耗3kb左右的內存,這樣真正制約服務端機器最大并發(fā)數(shù)的就是內存,拿一臺4GB內存的服務器來說,可以支持的TCP連接數(shù)量大約是100w+。

      一條客戶端機器最大究竟能支持多少條連接

      和服務端不同的是,客戶端每次建立一條連接都需要消耗一個端口。在TCP協(xié)議中,端口是一個2字節(jié)的整數(shù),因此范圍只能是0~65535。那么客戶單最大只能支持65535條連接嗎?有沒有辦法突破這個限制,有的話有哪些辦法?

      • 客戶度每次建立一條連接都需要消耗一個端口。從數(shù)字上來看,似乎最多只能建立65535條連接。但實際上我們有兩種辦法破除65535這個限制。

      方式一,為客戶端配置多IP 方式二,分別連接不同的服務端

      • 所以一臺client發(fā)起百萬條連接是沒有任何問題的。

      做一個長連接推送產品,支持1億用戶需要多少臺機器

      假設你是系統(tǒng)架構師,現(xiàn)在老板給你一個需求,讓你做一個類似友盟upush這樣的產品。要在服務端機器上保持一個和客戶端的長連接,絕大部分情況下連接都是空閑的,每天也就頂多推送兩三次左右??傆脩粢?guī)模預計是1億。那么現(xiàn)在請你來評估一下需要多少臺服務器可以支撐這1億條長連接。

      • 對于長連接推送模塊這種服務來說,給客戶端發(fā)送數(shù)據(jù)只是偶爾的,一般一天也就頂多一兩次。絕大部分情況下TCP連接都是空閑的,CPU開銷可以忽略。

      • 再基于內存來考慮,假設服務器內存是128G的,那么一臺服務器可以考慮支持500w條并發(fā)。這樣會消耗掉大約不到20GB內存用來保存這500w條連接對應的socket。還剩下100GB以上的內存來應對接收、發(fā)送緩沖區(qū)等其他的開銷足夠了。所以,一億用戶,僅僅需要20臺服務器就差不多夠用了!

      作者:文攀

      來源:https://juejin.cn/post/7162824884597293086

      公眾號“Java精選”所發(fā)表內容注明來源的,版權歸原出處所有(無法查證版權的或者未注明出處的均來自網絡,系轉載,轉載的目的在于傳遞更多信息,版權屬于原作者。如有侵權,請聯(lián)系,筆者會第一時間刪除處理!

      最近有很多人問,有沒有技術或摸魚交流群!加入方式很簡單,公眾號Java精選,回復“加群”,即可入群!在線摸魚:https://www.yoodb.com/

      文章有幫助的話,點在看,轉發(fā)吧!

      特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關推薦
      熱點推薦
      喜劇圈半壁江山齊聚!沈騰馬麗拜訪趙本山,曝聚會照范丞丞也來了

      喜劇圈半壁江山齊聚!沈騰馬麗拜訪趙本山,曝聚會照范丞丞也來了

      娛樂圈圈圓
      2025-12-20 10:51:13
      55歲鐘麗緹中年發(fā)福太多!胖到180斤 胸大腚圓 滿身肥肉穿吊帶

      55歲鐘麗緹中年發(fā)福太多!胖到180斤 胸大腚圓 滿身肥肉穿吊帶

      廣西阿妹香香
      2025-12-20 15:58:58
      克林頓與愛潑斯坦案受害者共浴照片披露

      克林頓與愛潑斯坦案受害者共浴照片披露

      揚子晚報
      2025-12-20 11:50:57
      美媒:“健康熱”激發(fā)中國人“戶外風”穿搭潮

      美媒:“健康熱”激發(fā)中國人“戶外風”穿搭潮

      參考消息
      2025-12-19 10:22:52
      深圳烤雞少年塌房!所謂秘方竟是“肉寶王”,評論區(qū)炸鍋

      深圳烤雞少年塌房!所謂秘方竟是“肉寶王”,評論區(qū)炸鍋

      胡嚴亂語
      2025-12-20 20:19:26
      印度約8000名考生坐機場跑道上答題考試,競爭僅有的187個政府職位

      印度約8000名考生坐機場跑道上答題考試,競爭僅有的187個政府職位

      觀威海
      2025-12-20 16:42:05
      杭州男子停車救人,沒想到救的竟是自己老婆!腦溢血9個月沒有后遺癥,網友:真的是愛的魔力……

      杭州男子停車救人,沒想到救的竟是自己老婆!腦溢血9個月沒有后遺癥,網友:真的是愛的魔力……

      環(huán)球網資訊
      2025-12-20 17:20:34
      中國證監(jiān)會原主席肖鋼:人工智能技術快速迭代,導致投資面臨加速折舊風險,需構建適配金融體系

      中國證監(jiān)會原主席肖鋼:人工智能技術快速迭代,導致投資面臨加速折舊風險,需構建適配金融體系

      新浪財經
      2025-12-20 17:36:13
      1-1大冷!中國隊逼平韓國隊,末輪贏球=擺脫倒數(shù)第一

      1-1大冷!中國隊逼平韓國隊,末輪贏球=擺脫倒數(shù)第一

      何老師呀
      2025-12-20 16:36:13
      咸魚還是太全面了,怪不得人稱國內黑市

      咸魚還是太全面了,怪不得人稱國內黑市

      另子維愛讀史
      2025-12-20 17:07:20
      圣誕節(jié)快到了,給個準話,還要不要抵制洋節(jié)?

      圣誕節(jié)快到了,給個準話,還要不要抵制洋節(jié)?

      沉思的野獸
      2025-12-19 19:07:28
      克林頓罕見強硬發(fā)聲:這不是烏克蘭的戰(zhàn)爭,而是美國的戰(zhàn)爭!

      克林頓罕見強硬發(fā)聲:這不是烏克蘭的戰(zhàn)爭,而是美國的戰(zhàn)爭!

      老馬拉車莫少裝
      2025-12-20 14:50:21
      5國首腦直奔東京,高氏癟嘴偷笑之際,日外相跑了,中方召見11國

      5國首腦直奔東京,高氏癟嘴偷笑之際,日外相跑了,中方召見11國

      博覽歷史
      2025-12-20 04:30:05
      遼寧男籃2分險勝寧波!楊鳴拒絕爆冷,威爾斯26分,付豪16分

      遼寧男籃2分險勝寧波!楊鳴拒絕爆冷,威爾斯26分,付豪16分

      體壇瞎白話
      2025-12-20 21:44:38
      高盛:未來2年房價或再跌10-30%  警告可能出現(xiàn)房價負反饋循環(huán)

      高盛:未來2年房價或再跌10-30% 警告可能出現(xiàn)房價負反饋循環(huán)

      財富情報局
      2025-12-19 23:06:25
      熱刺惡漢5分鐘3次激怒利物浦!肘擊+掐脖均逃牌,輸球后追罵裁判

      熱刺惡漢5分鐘3次激怒利物浦!肘擊+掐脖均逃牌,輸球后追罵裁判

      我愛英超
      2025-12-21 04:58:36
      發(fā)改委雄文,預示收入分配制度重大突破,釋放什么信號?

      發(fā)改委雄文,預示收入分配制度重大突破,釋放什么信號?

      華山穹劍
      2025-12-20 20:01:29
      降息50基點!剛剛,集體宣布!

      降息50基點!剛剛,集體宣布!

      證券時報
      2025-12-20 19:40:06
      兩岸好消息:“承認”共屬中國!臺當局終于做對1次,熟悉統(tǒng)一

      兩岸好消息:“承認”共屬中國!臺當局終于做對1次,熟悉統(tǒng)一

      愛吃醋的貓咪
      2025-12-20 21:11:30
      國家正式發(fā)力!2026 年 元旦起,存取現(xiàn)金統(tǒng)一按 “新規(guī)” 來!

      國家正式發(fā)力!2026 年 元旦起,存取現(xiàn)金統(tǒng)一按 “新規(guī)” 來!

      李博世財經
      2025-12-20 17:00:38
      2025-12-21 05:44:49
      Java精選
      Java精選
      一場永遠也演不完的戲
      1764文章數(shù) 3859關注度
      往期回顧 全部

      科技要聞

      許四清:具身智能的"ChatGPT時刻"還未到來

      頭條要聞

      高市早苗擔心被邊緣化 要趕在特朗普訪華前行動

      頭條要聞

      高市早苗擔心被邊緣化 要趕在特朗普訪華前行動

      體育要聞

      我開了20年大巴,現(xiàn)在是一名西甲主帥

      娛樂要聞

      2026央視跨年晚會陣容曝光,豪華陣仗

      財經要聞

      求解“地方財政困難”

      汽車要聞

      嵐圖推進L3量產測試 已完成11萬公里實際道路驗證

      態(tài)度原創(chuàng)

      藝術
      旅游
      時尚
      本地
      軍事航空

      藝術要聞

      中國老香煙品牌,你知道多少?

      旅游要聞

      不止紅墻白雪!故宮淡季爆火,藏著中國文旅升級的大信號

      最顯腿細的騎士靴,誰穿誰是腿精

      本地新聞

      云游安徽|訪黃山云海古村,讀一城山水風骨

      軍事要聞

      澤連斯基:前線局勢愈發(fā)艱難

      無障礙瀏覽 進入關懷版 主站蜘蛛池模板: 国产无码中文| 1769国内精品视频在线播放| 超碰福利导航| 国产成人亚洲无码淙合青草| 久久久www免费人成精品| 在线观看AV热码| 中文字幕av在线| 白浆网站| 拍国产真实乱人偷精品| 中文字幕AV一区| 91一区二区| 91视频观看| 拉萨市| 日韩无码2020| 武山县| 泰兴市| 91熟女视频| 阳高县| 天天躁日日躁夜夜爽| 国产九九在线观看| 中文无码网| 精品人妻久久| 99久久久无码国产精品免费| 兴隆县| 亚洲第一av网站| 人妻少妇一区二区三区| 国产色a在线观看| 狠狠噜天天噜日日噜| 国产日韩精品一区二区三区在线| 安岳县| 久久99精品国产| 久久精品人妻无码一区二区三区| 人妻夜夜爽天天爽| 成人午夜精品无码区久久| 色吊丝永久访问A| 亚洲丝袜熟女在线樱桃| 无码中文字幕热热久久| 亚洲熟妇久久国产精品| 亚洲无av在线中文字幕| 无码无卡| 亚洲中文字幕av|