net.ipv4.tcp_mem

net.ipv4.tcp_mem 用于设置 TCP 内存使用的阈值。它是一个包含三个整数值的数组,分别表示:

  • 最小值(low):当系统内存使用较低时,TCP 可以使用的最小内存量。

  • 中间值(pressure):当系统内存使用达到中间值时,TCP 会开始限制内存使用。

  • 最大值(high):当系统内存使用达到最大值时,TCP 将不再分配内存。 这些值的单位是内存页(页通常为 4KB)。默认情况下,tcp_mem 的值可能因系统配置和内核版本而异。

示例配置

# 设置 tcp_mem 的值为 4096 8192 16384 页
sysctl -w net.ipv4.tcp_mem="4096 8192 16384"
  1. 当TCP内存使用低于 4096 页 * 4KB = 16MB时,内核认为内存充足,TCP 协议栈可以积极地为新的连接和缓冲区分配内存,没有任何限制。

  2. 当TCP内存使用达到或超过 8192 页 * 4KB = 32MB 时,内核会积极地尝试回收 TCP 缓存和缓冲区,并可能开始限制为新连接分配的内存。TCP 的性能可能会开始受到影响。

  3. 当TCP内存使用量触及 16384 页 * 4KB = 64MB 时,内核会采取更严厉的措施,近乎禁止任何新的 TCP 内存分配,除非是为了释放内存。这会导致新连接的建立变得非常困难,甚至失败。这是一种保护机制,防止 TCP 耗尽系统的所有内存。

注意事项

麒麟操作系统的某些版本中存在与 net.ipv4.tcp_mem 相关的内核漏洞,可能导致内存管理异常。建议用户确保其系统内核版本已更新至以下修复版本:

  1. 《Kylin-Server-10-SP1-Release-Build20-20210518-x86_64》内核需要升级 4.19.90-23.30 及以上修复

  2. 《Kylin-Server-10-SP2-Release-Build09-20210524-x86_64》内核需要升级 4.19.90-25.22 及以上修复