如何查看linux的socket缓冲区大小
Linux 的默认套接字缓冲区大小是多少?有什么命令可以看到吗?
What's the default socket buffer size of linux? Is there any command to see it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
Linux 的默认套接字缓冲区大小是多少?有什么命令可以看到吗?
What's the default socket buffer size of linux? Is there any command to see it?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(5)
如果您想在终端中查看缓冲区大小,可以查看:
/proc/sys/net/ipv4/tcp_rmem
(用于读取)/proc/sys/net/ipv4/ tcp_wmem
(用于写入)它们包含三个数字,分别是最小、默认和最大内存大小值(以字节为单位)。
If you want see your buffer size in terminal, you can take a look at:
/proc/sys/net/ipv4/tcp_rmem
(for read)/proc/sys/net/ipv4/tcp_wmem
(for write)They contain three numbers, which are minimum, default and maximum memory size values (in byte), respectively.
为了在 c/c++ 程序中获取缓冲区大小,以下是流程
For getting the buffer size in c/c++ program the following is the flow
虽然正如已经指出的那样,可以在
/proc
中查看当前默认套接字缓冲区大小,也可以使用sysctl< /code> (注意:虽然名称中包含 ipv4,但这些大小也适用于 ipv6 套接字 - ipv6 tcp_v6_init_sock() 代码仅调用 ipv4 tcp_init_sock()函数):
返回最小、默认、最大缓冲区大小。但是,默认套接字缓冲区只是在初始化 sock 时设置,但内核随后会在这些限制内动态调整它们的大小,除非应用程序更改了最大发送缓冲区大小(尽管 内核使用双倍值),使用带有
SO_SNDBUF
套接字选项的setsockopt()。当前打开的套接字缓冲区的实际大小可以使用 ss 命令(
iproute
/iproute2
包的一部分)进行检查,该命令可以还提供有关套接字的更多信息,例如拥塞控制参数等。例如,要列出当前打开的 TCP(t
选项)套接字和关联的内存(m
)信息:这里有一些示例输出:
接收缓冲区带有前缀
rb
和发送/传输缓冲区是tb
。 ss 手册页 现在显示了返回各种skmem
(套接字内存)信息。此信息来自内核 - 这是相关 skmem 变量的简要说明 - 有关更多详细信息,请查看内核源代码(即 sock.h):
Whilst, as has been pointed out, it is possible to see the current default socket buffer sizes in
/proc
, it is also possible to check them usingsysctl
(Note: Whilst the name includes ipv4 these sizes also apply to ipv6 sockets - the ipv6 tcp_v6_init_sock() code just calls the ipv4 tcp_init_sock() function):This returns the min, default, max buffer sizes. However, the default socket buffers are just set when the sock is initialised but the kernel then dynamically sizes them within those limits, unless an app changes the maximum send buffer size (though the kernel uses double the value) using setsockopt() with
SO_SNDBUF
socket option.The actual size of the buffers for currently open sockets may be inspected using the
ss
command (part of theiproute
/iproute2
package), which can also provide a bunch more info on sockets like congestion control parameters etc. E.g. To list the currently open TCP (t
option) sockets and associated memory (m
) information:Here's some example output:
The receive buffer is prefixed
rb
and send/transmit buffer istb
. The ss man page now shows the definitions of the variousskmem
(socket memory) info returned.This info comes from the kernel - here's a brief explanation of the relevant skmem variables - for more details take a look at the kernel sources (i.e. sock.h):
我仍在尝试拼凑细节,但要添加到已经给出的答案中,这些是一些重要的命令:
参考文献和参考文献。帮助页面:
I'm still trying to piece together the details, but to add to the answers already given, these are some of the important commands:
References & help pages:
原子大小为 4096 字节,最大大小为 65536 字节。 Sendfile 使用 16 个管道,每个管道大小为 4096 字节。
cmd : ioctl(fd, FIONREAD, &buff_size)。
Atomic size is 4096 bytes, max size is 65536 bytes. Sendfile uses 16 pipes each of 4096 bytes size.
cmd : ioctl(fd, FIONREAD, &buff_size).