如何测量TCP背压?

时间:2016-07-19 16:44:47

标签: linux performance sockets

我正在尝试使用通过TCP套接字将日志发布到中央服务器的代码来调查性能问题。一个假设是发布者在套接字级别遇到了背压。有没有办法从操作系统中获得背压指标?

我确定答案是针对操作系统的。就我而言,我使用的是Ubuntu 14.04和默认的Canonical提供的3.13内核。

我认为我可以通过缩放发布的消息量并测量等待套接字写入完成所花费的相对时间来检测背压。但似乎这可能是一个常见的问题,找到衡量它的通用方法。 (但在我的谷歌搜索中,我发现的所有内容都是关于连接过程中阻塞的讨论以及有关背压如何工作的解释。)

2 个答案:

答案 0 :(得分:4)

使用eureka: provider: enabled: true accounts: - name: myaccount regions: - us-west-2 readOnlyUrl: "http://myeurekahost:8080/eureka" GWT ListBox

查看窗口大小

如果另一端没有跟上流量,它应该会下降。

答案 1 :(得分:3)

正如@karol-nowak 所说,您可以使用 tcpdump 检查每个 TCP 数据包 (here the structure of a TCP packet) 上发送的字段 window

我分享了一个服务器开始处理速度变慢的例子:

上下文:服务器在端口 8080 上运行。它将文件从客户端流式传输到外部服务器。代理和外部服务器之间的路径很慢,因为受 Internet 连接的限制。客户端和代理之间的路径很快,并且受到代理能够处理的速度的限制。需要注意的是,代理只是通过流处理将传入请求转发到传出请求到外部服务器,而不会将传入文件的所有内容都分配到堆上。

检查客户端和代理之间的路径(更快的路径):

sudo tcpdump -i any -nn "src port 8080"

地点:

  • -i any -> 任何网络接口
  • -nn -> 不要将地址转换为姓名
  • "src port 8080" -> 仅选择来自端口 8080(代理正在侦听的端口)的数据包

上述tcpdump的部分输出:

enter image description here

win 列中,您可以看到代理如何开始耗尽空间来缓冲客户端数据包,在这种情况下是从端口 63447 发送的,从而减慢了从客户端发送数据包的速度(它是值得注意的是 14:10:46 和 14:10:51 之间的差距)