【发布时间】:2016-07-19 16:44:46
【问题描述】:
我正在尝试调查通过 TCP 套接字将数据发布到服务器的代码的性能问题。一种假设是发布者在套接字级别遇到背压。有没有办法从操作系统获取背压指标?
我确信答案是特定于操作系统的。就我而言,我使用的是 Linux。
【问题讨论】:
标签: linux performance sockets
我正在尝试调查通过 TCP 套接字将数据发布到服务器的代码的性能问题。一种假设是发布者在套接字级别遇到背压。有没有办法从操作系统获取背压指标?
我确信答案是特定于操作系统的。就我而言,我使用的是 Linux。
【问题讨论】:
标签: linux performance sockets
用tcpdump查看窗口大小:https://en.wikipedia.org/wiki/TCP_tuning#Window_size
如果另一端跟不上流量,它应该会下降。
【讨论】:
正如@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的部分输出:
在win 列中,您可以看到代理如何开始用尽空间来缓冲客户端数据包,在本例中是从端口63447 发送的,从而减慢了从客户端发送数据包的速度(值得注意的是14:10:46 和 14:10:51)
【讨论】: