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

2024-10-29 08:35:00
admin
原创
51
摘要:问题描述: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)。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用