如何查找linux的套接字缓冲区大小

2024-10-29 08:35:00
admin
原创
197
摘要:问题描述:Linux 默认的套接字缓冲区大小是多少?有命令可以查看吗?解决方案 1:如果您想在终端中查看缓冲区大小,您可以查看:/proc/sys/net/ipv4/tcp_rmem(供阅读)/proc/sys/net/ipv4/tcp_wmem(用于写入)它们包含三个数字,分别是最小、默认和最大内存大小值(...

问题描述:

Linux 默认的套接字缓冲区大小是多少?有命令可以查看吗?


解决方案 1:

如果您想在终端中查看缓冲区大小,您可以查看:

  • /proc/sys/net/ipv4/tcp_rmem(供阅读)

  • /proc/sys/net/ipv4/tcp_wmem(用于写入)

它们包含三个数字,分别是最小、默认和最大内存大小值(以字节为单位)。

解决方案 2:

为了在 c/c++ 程序中获取缓冲区大小,以下是流程

int n;
unsigned int m = sizeof(n);
int fdsocket;
fdsocket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); // example
getsockopt(fdsocket,SOL_SOCKET,SO_RCVBUF,(void *)&n, &m);
// now the variable n will have the socket size

解决方案 3:

同时,正如已经指出的那样,可以在中查看当前默认套接字缓冲区大小/proc,也可以使用以下命令检查它们sysctl(注意:虽然名称包含 ipv4,但这些大小也适用于 ipv6 套接字 - ipv6 tcp_v6_init_sock() 代码只调用 ipv4 tcp_init_sock() 函数):

 sysctl net.ipv4.tcp_rmem
 sysctl net.ipv4.tcp_wmem

这将返回最小、默认和最大缓冲区大小。但是,默认套接字缓冲区仅在初始化套接字时设置,但内核随后会在这些限制内动态调整它们的大小,除非应用程序使用带有套接字选项的 setsockopt() 更改最大发送缓冲区大小(尽管内核使用双倍的值)SO_SNDBUF

可以使用命令( /包ss的一部分)检查当前打开的套接字的缓冲区的实际大小,该命令还可以提供有关套接字的更多信息,如拥塞控制参数等。例如,列出当前打开的 TCP(选项)套接字和相关内存()信息:iproute`iproute2tm`

ss -tm

以下是一些示例输出:

State       Recv-Q Send-Q        Local Address:Port        Peer Address:Port
ESTAB       0      0             192.168.56.102:ssh        192.168.56.1:56328
skmem:(r0,rb369280,t0,tb87040,f0,w0,o0,bl0,d0)

接收缓冲区带有前缀rb,发送/传输缓冲区带有前缀tb。ss手册页skmem现在显示了返回的各种(套接字内存)信息的定义。

skmem:(r<rmem_alloc>,rb<rcv_buf>,t<wmem_alloc>,tb<snd_buf>,
   f<fwd_alloc>,w<wmem_queued>,o<opt_mem>,bl<back_log>,d<sock_drop>)

  <rmem_alloc>
         the memory allocated for receiving packet

  <rcv_buf>
         the total memory can be allocated for receiving
         packet

  <wmem_alloc>
         the memory used for sending packet (which has been
         sent to layer 3)

  <snd_buf>
         the total memory can be allocated for sending
         packet

  <fwd_alloc>
         the memory allocated by the socket as cache, but
         not used for receiving/sending packet yet. If need
         memory to send/receive packet, the memory in this
         cache will be used before allocate additional
         memory.

  <wmem_queued>
         The memory allocated for sending packet (which has
         not been sent to layer 3)

  <opt_mem>
         The memory used for storing socket option, e.g.,
         the key for TCP MD5 signature

  <back_log>
         The memory used for the sk backlog queue. On a
         process context, if the process is receiving
         packet, and a new packet is received, it will be
         put into the sk backlog queue, so it can be
         received by the process immediately

  <sock_drop>
         the number of packets dropped before they are de-
         multiplexed into the socket

该信息来自内核 - 这里是对相关 skmem 变量的简要说明 - 有关更多详细信息,请查看内核源代码(即sock.h):

r:sk_rmem_alloc
rb:sk_rcvbuf          # current receive buffer size
t:sk_wmem_alloc
tb:sk_sndbuf          # current transmit buffer size
f:sk_forward_alloc    # space allocated forward
w:sk_wmem_queued      # persistent transmit queue size
o:sk_omem_alloc
bl:sk_backlog
d:sk_drops

解决方案 4:

我仍在尝试拼凑细节,但为了补充已经给出的答案,以下是一些重要的命令:

cat /proc/sys/net/ipv4/udp_mem
cat /proc/sys/net/core/rmem_max
cat /proc/sys/net/ipv4/tcp_rmem
cat /proc/sys/net/ipv4/tcp_wmem
ss -m  # see `man ss`

参考资料和帮助页面:

  1. 手册页

man 7 socket
man 7 udp
man 7 tcp
man ss
  1. https://www.linux.org/threads/how-to-calculate-tcp-socket-memory-usage.32059/

解决方案 5:

原子大小为 4096 字节,最大大小为 65536 字节。Sendfile 使用 16 个管道,每个管道大小为 4096 字节。cmd:ioctl(fd、FIONREAD、&buff_size)。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1289  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。其中,技术评审(TR,Technical Review)环节至关重要,它不仅是对技术方案的评估,更是激发创新思维、推动产品创新的关键节点。深入理解TR在IPD流程中的创新思维及其应用实践...
IPD流程中TR   9  
  IPD(Integrated Product Development)产品开发流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。它打破了传统产品开发过程中部门之间的壁垒,将市场、研发、生产、销售等各个环节有机整合在一起,形成一个高效协同的整体。通过这种方式,企业能够更快速、更精准地开发出满足市场需求的产品...
IPD管理流程   11  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。其中,技术评审(TR,Technical Review)环节在整个IPD流程里占据着关键位置,对项目的成功有着深远影响。深入探讨TR与项目成功的关系,有助于企业更好地运用IPD流程,提升...
IPD项目管理   8  
  IPD研发管理体系旨在打破部门墙,实现跨部门协同,确保产品开发以市场和客户需求为导向,高效、高质量地推出满足市场需求的产品。在这一体系下,产品创新可拆解为三个关键步骤,它们环环相扣,共同推动企业的产品不断迭代升级,在激烈的市场竞争中占据优势。这三个步骤分别聚焦于洞察市场机会、规划产品战略以及执行开发与验证,每一步都蕴含...
IPD框架   10  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用