[转]linux下TCP连接占用的资源
維持一個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內存的機器,在不考慮其他限制下,最多支持的并發量為:8*1024*1024/8 約等于100萬。此數字為純理論上限數值,在實際中,由于linux kernel對一些資源的限制,加上程序的業務處理,所以,8G內存是很難達到100萬連接的,當然,我們也可以通過增加內存的方式增加并發量。
網上也有人做過相關試驗,程序接收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
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
轉載于:https://www.cnblogs.com/tlmn2008/p/10748520.html
總結
以上是生活随笔為你收集整理的[转]linux下TCP连接占用的资源的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: - The superclass jav
- 下一篇: 反Secure Boot垄断:兼谈如何在