Linux TCP:发送方高发送Q,接收方零接收Q

Ori*_*esh 14 sockets linux tcp

怎么可能:

  1. 两台机器之间有一个TCP套接字
  2. 在一些成功的双向通信之后,发送方应用程序卡在写入套接字和接收方读取套接字上
  3. netstat 为发送方上的套接字报告高 Send-Q(几兆字节)(即使等待几个小时后该值也不会改变)
  4. netstat 为接收器上的套接字报告零 Recv-Q
  5. tcpdump 报告套接字上的唯一活动是定期(每分钟)ACK 没有来自发送方的数据和立即 ACK 响应没有来自接收方的数据

为什么发送方机器不尝试将排队的数据发送给接收方?

Apo*_*orv 2

就我而言,客户端以 8KB 块写入数据,服务器尝试读取 8KB,然后服务器将其写入 RAID0 磁盘。对于上传大文件,我遇到了类似的情况,增加从服务器端套接字读取的数据量有所帮助。我将从套接字读取的内部缓冲区的大小增加到 1MB(从 8 kB),这很有帮助。我不确定这是因为 RAID 还是 tcp,但这可能是您可能想尝试的另一件事。