如何读取linux下TCP堆栈backlog中待处理的请求数?

如何读取linux下TCP堆栈backlog中待处理的请求数?

我确实设置了kern.ipc.somaxconn内核参数来调整服务器上传入连接的最大积压 TCP 大小。我现在想读取此积压中当前待处理的请求数量。

我一度以为这是'ESTABLISED'netstat 输出中的状态连接数,但我明白应用程序正在处理的请求也可能处于这种状态。

我必须在 /proc/ 文件系统中读取一个文件吗?这是我错过的 netstat 选项吗?

答案1

如果我正确理解了这个问题,我相信您指的是来自 netstat 的 Recv-Q 和 Send-Q 数字。

如果这些数字不接近于零,那么很有可能是硬件出现了问题,或者是您的链路已经饱和。

答案2

TCP 连接的数据首先被接收到位于内核空间的缓冲区中。在这种情况下,Recv-Q 非零。然后,如果进程调用 read 被复制到用户空间中。如果没有(应用程序已饱和),它们将保留在内核缓冲区中。

PS:您使用的是Linux还是FreeBSD?

相关内容