[转]linux下TCP连接占用的资源
維持一個tcp連接需要占用哪些資源,下面就總結(jié)一下最近學(xué)習(xí)的內(nèi)容,不足之處,請讀者多多指正。
一個tcp連接需要:1,socket文件描述符;2,IP地址;3,端口;4,內(nèi)存
TCP連接的四元組:源IP 源端口 目標(biāo)IP 目標(biāo)端口,這四元組構(gòu)成了一個唯一的tcp連接。
對于一臺服務(wù)器,我們假設(shè)只有一個網(wǎng)卡,那么就對應(yīng)一個唯一的IP地址,而監(jiān)聽端口,我們可以在1024-65535之間任選一個。通過這個監(jiān)聽端口,我們接收來自客戶端的連接請求。那么,它的IP、端口已經(jīng)確定了,下面就是討論socket文件描述符合內(nèi)存了。
對于文件描述符fd,每個tcp連接占用一個,那么一個文件描述符下的文件大約占1K字節(jié),而內(nèi)核對這塊也有說明,文件描述符建議最多占用10%的內(nèi)存,如果是8G內(nèi)存,那么就相當(dāng)于800M即80000,80萬個文件描述符,當(dāng)然,這個數(shù)據(jù)也可以通過linux參數(shù)調(diào)優(yōu)進行調(diào)節(jié),我在之前的一篇章節(jié)中也有討論到,請大家參考:http://blog.csdn.net/fox_hacker/article/details/41148115
而對于內(nèi)存,tcp連接歸根結(jié)底需要雙方接收和發(fā)送數(shù)據(jù),那么就需要一個讀緩沖區(qū)和寫緩沖區(qū),這兩個buffer在linux下最小為4096字節(jié),可通過cat /proc/sys/net/ipv4/tcp_rmem和cat /proc/sys/net/ipv4/tcp_wmem來查看。所以,一個tcp連接最小占用內(nèi)存為4096+4096 = 8k,那么對于一個8G內(nèi)存的機器,在不考慮其他限制下,最多支持的并發(fā)量為:8*1024*1024/8 約等于100萬。此數(shù)字為純理論上限數(shù)值,在實際中,由于linux kernel對一些資源的限制,加上程序的業(yè)務(wù)處理,所以,8G內(nèi)存是很難達到100萬連接的,當(dāng)然,我們也可以通過增加內(nèi)存的方式增加并發(fā)量。
網(wǎng)上也有人做過相關(guān)試驗,程序接收1024000個連接,共消耗7,5G內(nèi)存,即每個連接消耗在8K左右。
參考:?http://www.blogjava.net/yongboy/archive/2013/04/11/397677.html
---------------------
作者:亂碼特輕松
來源:CSDN
原文:https://blog.csdn.net/fox_hacker/article/details/41440561
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!
轉(zhuǎn)載于:https://www.cnblogs.com/tlmn2008/p/10748520.html
總結(jié)
以上是生活随笔為你收集整理的[转]linux下TCP连接占用的资源的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: - The superclass jav
- 下一篇: 适用于单片机的数据加密算法:xxtea