每个TCP / IPnetworking连接使用多less内存?

平均每个TCP / IPnetworking连接占用多less内存(在内核地址空间中)?

Solutions Collecting From Web of "每个TCP / IPnetworking连接使用多less内存?"

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

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

  2. 连接的读写缓冲区

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

root@x:~# sysctl -A | grep net | grep mem 

检查这些变量

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

 net.core.wmem_max = 131071 net.core.rmem_max = 131071 net.core.wmem_default = 126976 net.core.rmem_default = 126976 

这些指定了特定于TCP连接的缓冲存储器使用情况

 net.ipv4.tcp_mem = 378528 504704 757056 net.ipv4.tcp_wmem = 4096 16384 4194304 net.ipv4.tcp_rmem = 4096 87380 4194304 

指定的三个值是“最小默认最大”缓冲区大小。 因此,以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' 

还取决于哪一层。 在纯粹的桥接情况下,只有桥接级别的FDB。 路由进入时,有路由表和IP级别的FDB /邻居数据库。 最后,一旦本地套接字在播放,你当然有窗口大小,套接字缓冲区(发送和接收,他们默认为128K上次我检查),片段列表(如果使用),所以这就是你的地方记忆力会下降,但是一个明确的答案很难与所有使用的零件相关联。 您可以使用ss -m获取本地流套接字的一些内存统计信息。

这取决于。 许多事情。
我认为一个空闲的连接将需要几百个字节。
但是,如果发送和/或接收数据中有数据,则消耗会增加。 窗口大小可以大致限制这种消费。
数据的额外消耗不仅仅是接收/发送队列中的字节。 有开销,所以一个字节段可能需要2K的东西。 TCP试图减少这种情况,例如通过合并段到单个sk_buff,但并不总是成功。