博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]linux下TCP连接占用的资源
阅读量:5068 次
发布时间:2019-06-12

本文共 1090 字,大约阅读时间需要 3 分钟。

维持一个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

你可能感兴趣的文章
【转】Android的权限permission
查看>>
ajax
查看>>
poj1981 Circle and Points 单位圆覆盖问题
查看>>
POP的Stroke动画
查看>>
线程同步机制初识 【转载】
查看>>
Oracle 游标使用全解
查看>>
SQL语句在查询分析器中可以执行,代码中不能执行
查看>>
yii 1.x 添加 rules 验证url数组
查看>>
html+css 布局篇
查看>>
银行排队问题(详解队列)
查看>>
序列化和反序列化(1)---[Serializable]
查看>>
SQL优化
查看>>
用C语言操纵Mysql
查看>>
轻松学MVC4.0–6 MVC的执行流程
查看>>
4.9 Parser Generators
查看>>
redis集群如何清理前缀相同的key
查看>>
redis7--hash set的操作
查看>>
20.字典
查看>>
Python 集合(Set)、字典(Dictionary)
查看>>
oracle用户锁定
查看>>