linux为每个tcp分配多少内存?还有Windows为每个tcp分配多少内存

linux为每个tcp分配多少内存?还有Windows为每个tcp分配多少内存,第1张

下面这些是在网上找到的,可以参考一下:

*** 作系统:CentOS

查看TCP能使用的内存

shell>cat /proc/sys/net/ipv4/tcp_mem

1528416 2037888 3056832

这三个值就是TCP可使用内存的大小,单位是页,每个页是4K的大小。

这三个值分别代表

Low:1528416 (1528416 *4/1024/1024大概6g)

Pressure:2037888 (2037888 *4/1024/1024大概8g)

High:3056832(3056832*4/1024/1024大概12g)

这个也是系统装后的默认取值,也就是说最大有12个g(75%的内存)可以用作TCP连接,这三个量也同时代表了三个阀值,TCP的使用小于第二个值时kernel不会有任何提示 *** 作,当大于第二个值时进入压力模式,当高于第三个值时将不接受新的TCP连接,同时会报出“Out of socket memory”或者“TCP:too many of orphaned sockets”。

TCP读缓存大小:

shell>cat /proc/sys/net/ipv4/tcp_rmem

4096 87380 4194304

单位是字节:第一个是最小值4K,第二个是默认值85K,第三个是最大值4M,这个可以在sysctl.conf中net.ipv4.tcp_rmem中进行调整。

TCP写缓存大小:

shell>cat /proc/sys/net/ipv4/tcp_wmem

4096 16384 4194304

单位是字节:第一个是最小值4K,第二个是默认值16K,第三个是最大值4M,这个可以在sysctl.conf中net.ipv4.tcp_wmem中进行调整。

一个TCP在三次握手建立连接后,最小的内存消耗在8K(读4K+写4K)左右,默认的内存消耗在101K(读85K+写16K)左右,最大的内存消耗在(读4M+写4M)8M左右,按照系统TCP的全局控制,有12个g可用作内存缓存,假设按照最小的读写缓存计算,一个TCP连接占用8K内存,那么系统能承受最大的并发为 12*1024*1024/8 = 157万,假设按照默认的读写缓存计算,一个TCP连接占用101K内存,那么系统能承受最大的并发为 12*1024*1024/101 = 12万,假设按照最大的读写缓存计算,一个TCP连接占用8M内存,那么系统能承受最大的并发为 12*1024/8 = 1536。

当客户通过Socket提供的send函数发送大的数据包时,就可能返回一个EGGAIN的错误。该错误产生的原因是由于send 函数中的size变量大小超过了

tcp_sendspace的值。tcp_sendspace定义了应用在调用send之前能够在kernel中缓存的数据量。当应用程序在socket中设置了O_NDELAY或者O_NONBLOCK属性后,如果发送缓存被占满,send就会返回EAGAIN的错误。

linux清cache会影响tcp,因为linux清cache时,这些文件会被系统用来设置所有socket的发送和接收缓存大小,此时既影响TCP,也影响UDP,所以linux清cache会影响tcp。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7223878.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-03
下一篇2023-04-03

发表评论

登录后才能评论

评论列表(0条)

    保存