每个TCP/IP网络连接的Linux内核消耗了多少内存?

28 linux memory-management tcp-ip

每个TCP/IP网络连接的Linux内核(在内核地址空间中)平均消耗多少内存?

小智 44

对于消耗的TCP连接内存取决于

  1. sk_buff的大小(linux内核使用的内部网络结构)

  2. 连接的读写缓冲区

可以根据需要调整缓冲区的大小

root@x:~# sysctl -A | grep net | grep mem
Run Code Online (Sandbox Code Playgroud)

检查这些变量

这些指定了内核中所有网络连接的最大默认内存缓冲区使用情况

net.core.wmem_max = 131071

net.core.rmem_max = 131071

net.core.wmem_default = 126976

net.core.rmem_default = 126976
Run Code Online (Sandbox Code Playgroud)

这些指定了特定于tcp连接的缓冲区内存使用量

net.ipv4.tcp_mem = 378528   504704  757056

net.ipv4.tcp_wmem = 4096    16384   4194304

net.ipv4.tcp_rmem = 4096    87380   4194304
Run Code Online (Sandbox Code Playgroud)

指定的三个值是"min default max"缓冲区大小.因此,从linux开始,将为每个连接使用读写缓冲区的默认值.随着连接数量的增加,这些缓冲区将减少[最多直到指定的最小值]同样是最大缓冲区值的情况.

可以使用此设置这些值 sysctl -w KEY=KEY VALUE

例如.以下命令确保每个连接的读写缓冲区各为4096.

sysctl -w net.ipv4.tcp_rmem='4096 4096 4096'

sysctl -w net.ipv4.tcp_wmem='4096 4096 4096'
Run Code Online (Sandbox Code Playgroud)