首页/系统/Linux 内核与性能调优速查/net.core.optmem_max 辅助缓冲区上限
sysctl 内核参数72 条

net.core.optmem_max 辅助缓冲区上限

单个套接字辅助数据(cmsg 等控制信息)缓冲上限;带辅助信息的通信(特定隧道/组播场景)可能受其约束。

辅助数据缓冲上限

限制单个套接字用于存放辅助数据的缓冲上限。辅助数据是随报文一起传递的控制信息,例如地址信息、附加结构与安全标签,和业务数据是两回事。普通 TCP、HTTP 服务几乎不受这个上限影响,只有控制信息明显较大的特定场景才需要关注。

基本信息

适用平台Linux 内核参数(net.core 命名空间)
参数名net.core.optmem_max
作用对象套接字辅助数据缓冲,而非业务数据缓冲
典型场景控制消息较大的隧道与组播应用
易混淆项业务数据收发缓冲由另一组参数控制

典型使用场景

  • 特定隧道或组播应用报缓冲区相关错误时的核对项。
  • 排查错误信息时先确认是辅助数据缓冲还是业务缓冲不足。
  • 评估带有大量控制信息的协议在容量上是否受限。
  • 与服务端日志中的参数错误对照,判断是否需要调整。
  • 容量规划时确认辅助数据的额外内存开销。

查看与核对

查看与核对
sysctl net.core.optmem_max          # 查看辅助数据缓冲上限
sysctl net.core.rmem_max net.core.wmem_max   # 业务数据缓冲上限,两者不要混淆
sysctl net.ipv4.tcp_rmem net.ipv4.tcp_wmem   # 单个连接的收发缓冲范围
ss -m                              # 查看套接字的缓冲使用情况
ip -s link show                    # 结合接口统计判断是否有丢弃

参数与作用对象

参数作用对象误用后果
辅助数据上限控制消息缓冲调它解决不了业务吞吐问题
业务收发上限数据缓冲过小会限制吞吐
连接级缓冲范围单个连接的收发缓冲与系统级上限互相约束
看到「缓冲区」相关报错先分类:是控制信息过大、数据缓冲不足,还是队列满了丢包,三类问题的处理方式完全不同。
把它当成业务收发缓冲上限去调是常见误解:调大后既不能提升吞吐,也不会减少应用层的发送失败,反而掩盖了真正的问题。

易错点

  • 把它误当业务收发缓冲上限去调,方向错误且看不到任何改善。
  • 协议报错信息不直观,不结合文档核实就随手调参。
  • 只调单项参数,忽略与连接级缓冲范围之间的相互约束。
  • 在普通 Web 服务上调整,投入没有实际收益。
  • 调大后未记录原值,回退时无据可依。

数据来源与参考

  • Linux 内核 Documentation/admin-guide/sysctl/net.rst
  • man 7 socket(SCM 相关)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌