[转]linux下TCP链接占用的资源

维持一个tcp链接须要占用哪些资源,下面就总结一下最近学习的内容,不足之处,请读者多多指正。html

一个tcp链接须要:1,socket文件描述符;2,IP地址;3,端口;4,内存java

TCP链接的四元组:源IP 源端口 目标IP 目标端口,这四元组构成了一个惟一的tcp链接。linux

对于一台服务器,咱们假设只有一个网卡,那么就对应一个惟一的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万链接的,固然,咱们也能够经过增长内存的方式增长并发量。socket

网上也有人作过相关试验,程序接收1024000个链接,共消耗7,5G内存,即每一个链接消耗在8K左右。tcp

参考: http://www.blogjava.net/yongboy/archive/2013/04/11/397677.html
---------------------
做者:乱码特轻松
来源:CSDN
原文:https://blog.csdn.net/fox_hacker/article/details/41440561
版权声明:本文为博主原创文章,转载请附上博文连接!学习

相关文章
相关标签/搜索