- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
netstat 输出中的 Recv-Q 和 Send-Q 列有什么用?我如何在现实场景中使用它?
在我的系统上,两列始终显示为零。这是什么意思?
最佳答案
来 self 的手册页:
Recv-Q
Established: The count of bytes not copied by the user program connected to this socket.
Listening: Since Kernel 2.6.18 this column contains the current syn backlog.
Send-Q
Established: The count of bytes not acknowledged by the remote host.
Listening: Since Kernel 2.6.18 this column contains the maximum size of the syn backlog.
如果您将其固定为 0,这仅意味着您的应用程序在连接的两端以及它们之间的网络都运行良好。实际的瞬时值可能不同于 0,但以一种短暂的、易变的方式,您没有机会实际观察到它。
这可能与 0 不同的现实场景示例(在已建立的连接上,但我想您会明白的):
我最近在与(设计不佳的)第三方设备通信的 Linux 嵌入式设备上工作。在这个第三方设备上,应用程序有时明显卡住了,没有读取它在 TCP 连接上收到的数据,导致它的 TCP 窗口下降到 0 并在那里停留数十秒(通过 wireshark 在镜像端口上观察到的现象) 2 个主机)。在这种情况下:
Recv-Q: 在第三方设备上运行 netstat
(我没有意思是做)可能已经显示出增加的 Recv-Q,达到某个屋顶值另一方(我)停止发送数据,因为窗口得到下降到 0,因为应用程序不读取可用的数据它的套接字,并且这些数据保留在 TCP 实现中的缓冲中操作系统,不会从接收器转到卡住的应用程序 -> 方面,应用问题。
Send-Q: 在 我 端运行 netstat
(我没有尝试,因为1/问题从 wireshark 很明显,是上面的第一个案例并且 2/这不是 100% 可重现的)可能已经显示非零Send-Q,如果操作系统级别的另一端 TCP 实现有被卡住并停止确认我的数据 -> 来自发件人端,接收 TCP 实现(通常在操作系统级别)问题。
请注意,上面描述的 Send-Q 场景也可能是发送方问题(我方)如果我的 Linux TCP 实现行为不当并在 TCP 窗口下降到 0 后继续发送数据: 接收方没有更多空间容纳此数据 -> 不确认。
另请注意,Send-Q 问题可能不是由接收方引起的,而是由发送方和接收方之间某处的某些路由问题引起的。一些数据包在 2 台主机之间“运行中”,但尚未确认。 另一方面,Recv-Q 问题肯定在主机上:数据包已收到,已确认,但尚未从应用程序中读取。
编辑:
在现实生活中,如您所料,主机和应用程序并不糟糕,我敢打赌 Send-Q 问题大部分时间是由发送之间的某些路由问题/网络性能不佳引起的和接收方。永远不要忘记数据包的“运行中”状态:
数据包可能在发送方和接收方之间的网络上,
(或收到但 ACK 尚未发送,见上文)
或者 ACK 可能在接收方和发送方之间的网络上。
发送数据包然后确认需要一个 RTT(往返时间)。
关于linux - Recv-Q 和 Send-Q 的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36466744/
我很难理解为什么这段代码无法编译: use std::cell::{Ref, RefCell}; struct St { data: RefCell } impl St { pub f
我从Richard Blum的一本书《 C#网络编程》中读到有关套接字的信息。以下摘录指出,不保证Send()方法可以发送所有传递给它的数据。 byte[] data = new byte[1024]
我有以下程序,它必须一次读取 1MB 的文件,将其发送到服务器(每次总是 1MB)并返回哈希码: #include #include #include #include #include #
代码在底部。 第 207 行的 send() 命令本身可以正常工作。但是,当我在第 218 行添加 send() 命令时,第一个命令失败 - 给出错误“地址错误”。我已经确认第二个 send() 命令
标记包含 !Send 的类型背后的原因是什么?字段(如 Rc 或 NonNull )与 Send特征?例如,标准库的 LinkedList 以这种方式工作:它包含 Option>字段并实现 Send特
我是新手,我正在尝试学习 goroutines 中信号函数的一些基本用法。我在 go 中有一个无限循环。通过这个 for 循环,我通过 channel 将值传递给 goroutine。 我也有一个阈值
如果数据是从另一台计算机(首先)“发送”的,我如何设置我的套接字例程以“发送”(首先)或(切换)“接收”? 谢谢 通用代码: -(void) TcpClient{ char buffer[12
这个问题已经有答案了: Java multiple file transfer over socket (3 个回答) 已关闭 4 年前。 我正在使用 Java Socket 将文件发送到服务器,然后
根据以下示例中的类型,Go编译器似乎将执行两个完全不同的语义操作: chanA <-chanB 如果chanA是类型(chan chan <-字符串),则此操作会将本身类型chanB的类型(chan
我正在尝试在 VBA 中使用 WinSock2 从本地主机 TCP 流发送(以及稍后接收)数据。 目前,我主要尝试从此处复制客户端示例,https://msdn.microsoft.com/en-us
我在我的 Mac OS X Yosemite 控制台中看到了这个: AppleEvents: Send port for process has no send right, port=( port:
我知道Clojure的“代理”是ref,带有“操作”的添加工作队列。 Action 是使用ref的值在第一个位置调用的函数,可以将其传递给其他参数。操作将返回ref的新值。因此,“代理”是一种计算re
我无法将任何对象或数组传递给 IPCRenderer。 通过 ipcs 传递对象或数组时出现错误,我什至尝试通过使用 JSON.stringify 转换为字符串来发送,但它会将其转换为空对象字符串。
我正在使用unix scoket进行数据传输(SOCK_STREAM模式) 我需要发送超过100k个字符的字符串。首先,我发送一个字符串的长度-它是sizeof(int)个字节。 length = s
Clojure API 将这两个函数描述为: (send a f & args) - Dispatch an action to an agent. Returns the agent immedia
def send_Button(): try: myMsg = "ME: " + text.get() msg = text.get() con
Ruby 对象都有一个“发送”方法,但是,我正在尝试使用一个 Java 库 ( netty-tools ),它的一个接口(interface)上有一个“发送”方法。 用法应该是 java_obj.se
Feb 8, 2011 11:56:49 AM com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPC onnection post SEVE
来自 man 2 send: MSG_MORE (since Linux 2.4.4) (…) Since Linux 2.6, this flag is also supported for UDP
我的网页中可以有一个按钮,用于将预填充的消息发送到特定号码吗? 我正在尝试 intent://send/+391234567890#Intent;scheme=smsto;package=com.wh
我是一名优秀的程序员,十分优秀!