tcp内存占用/socket内存占用

Posted shengulong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tcp内存占用/socket内存占用相关的知识,希望对你有一定的参考价值。

net.ipv4.tcp_mem

内核分配给TCP连接的内存,单位是Page,1 Page = 4096 Bytes,可用命令查看:

#getconf PAGESIZE
4096

net.ipv4.tcp_mem = 196608   262144  393216
  • 第一个数字表示,当 tcp 使用的 page 少于 196608 时,kernel 不对其进行任何的干预
  • 第二个数字表示,当 tcp 使用了超过 262144 的 pages 时,kernel 会进入 “memory pressure” 压力模式
  • 第三个数字表示,当 tcp 使用的 pages 超过 393216 时(相当于1.6GB内存),就会报:Out of socket memory

net.ipv4.tcp_rmem 和 net.ipv4.tcp_wmem

为每个TCP连接(一个socket)分配的读、写缓冲区内存大小,单位是Byte

net.ipv4.tcp_rmem = 4096        8192    4194304
net.ipv4.tcp_wmem = 4096       8192    4194304
  • 第一个数字表示,为TCP连接分配的最小内存
  • 第二个数字表示,为TCP连接分配的缺省内存
  • 第三个数字表示,为TCP连接分配的最大内存

一般按照缺省值分配,上面的例子就是读写均为8KB,共16KB

1.6GB TCP内存能容纳的连接数,约为 1600MB/16KB = 100K = 10万

4.0GB TCP内存能容纳的连接数,约为 4000MB/16KB = 250K = 25万

当然socket还包含文件描述符的内存占用,以及真正接收和发送时,缓冲区不见得是满的

以上是关于tcp内存占用/socket内存占用的主要内容,如果未能解决你的问题,请参考以下文章

一条TCP连接时占用内存空间多少?

一条TCP连接时占用内存空间多少?

redis占用高内存导致的socket连接失败

Windbg 查内存占用

Java TCP/IP Socket基于线程池的TCP服务器(含代码)

请问用Java代码,怎样测试一段程序占用了多少内存?