TCP連線佔用的資源
版權宣告:本文為博主原創文章,未經博主允許不得轉載,轉載請註明出處。 https://blog.csdn.net/fox_hacker/article/details/41440561
維持一個tcp連線需要佔用哪些資源,下面就總結一下最近學習的內容,不足之處,請讀者多多指正。
一個tcp連線需要:1,socket檔案描述符;2,IP地址;3,埠;4,記憶體
TCP連線的四元組:源IP 源埠 目標IP 目標埠,這四元組構成了一個唯一的tcp連線。
對於一臺伺服器,我們假設只有一個網絡卡,那麼就對應一個唯一的IP地址,而監聽埠,我們可以在1024-65535之間任選一個。通過這個監聽埠,我們接收來自客戶端的連線請求。那麼,它的IP、埠已經確定了,下面就是討論socket檔案描述符合記憶體了。
對於檔案描述符fd,每個tcp連線佔用一個,那麼一個檔案描述符下的檔案大約佔1K位元組,而核心對這塊也有說明,檔案描述符建議最多佔用10%的記憶體,如果是8G記憶體,那麼就相當於800M即80000,80萬個檔案描述符,當然,這個資料也可以通過linux引數調優進行調節,我在之前的一篇章節中也有討論到,請大家參考:http://blog.csdn.net/fox_hacker/article/details/41148115
而對於記憶體,tcp連線歸根結底需要雙方接收和傳送資料,那麼就需要一個讀緩衝區和寫緩衝區,這兩個buffer在linux下最小為4096位元組,可通過cat /proc/sys/net/ipv4/tcp_rmem和cat /proc/sys/net/ipv4/tcp_wmem來檢視。所以,一個tcp連線最小佔用記憶體為4096+4096 = 8k,那麼對於一個8G記憶體的機器,在不考慮其他限制下,最多支援的併發量為:81024
網上也有人做過相關試驗,程式接收1024000個連線,共消耗7,5G記憶體,即每個連線消耗在8K左右。
參考: http://www.blogjava.net/yongboy/archive/2013/04/11/397677.html
作者:亂碼特輕鬆
來源:CSDN
原文:https://blog.csdn.net/fox_hacker/article/details/41440561
版權宣告:本文為博主原創文章,轉載請附上博文連結!