
*** 作系统: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。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)