当进程在 Linux 虚拟机上调用“connect”时,我看到错误消息“没有可用的缓冲区空间”。我在追查原因时遇到了麻烦-希望有人可以提供帮助!
我检查了以下内容:
(1) 文件句柄:
cat /proc/sys/fs/file-nr
4672 0 810707
Run Code Online (Sandbox Code Playgroud)
我正在阅读它(已分配,未使用,可用),所以这看起来不错。
(2) 套接字或 TCP 内存:
cat /proc/sys/net/ipv4/tcp_mem
191889 255854 383778
cat /proc/net/sockstat
sockets: used 579
TCP: inuse 169 orphan 0 tw 245 alloc 187 mem 5
UDP: inuse 31 mem 4
UDPLITE: inuse 0
RAW: inuse 0
FRAG: inuse 0 memory 0
Run Code Online (Sandbox Code Playgroud)
读到这里总共只有 579 个正在使用的套接字,页面总数远低于最大值。
Google 上显示了许多随机 TCP 调整 - 我希望在答案中是 (1) 我即将用完的资源,(2) 如何确定当前值以及 (3) 如何调整天花板。我发现的大多数页面都缺少除 (3) 之外的所有内容!
** 更新 #1 **
在 Flup 的建议下,我在它发生时做了一个 systrace(使用 ping):
socket(PF_INET, SOCK_DGRAM, …
Run Code Online (Sandbox Code Playgroud)