使用curl调试慢速下载
我看到了一个非常奇怪的现象,我不明白。我正试图从我的一台服务器上调试一个下载速度较慢的程序,我使用了来自外部机器的以下命令:使用curl调试慢速下载,curl,download,apache2,trace,tcpdump,Curl,Download,Apache2,Trace,Tcpdump,我看到了一个非常奇怪的现象,我不明白。我正试图从我的一台服务器上调试一个下载速度较慢的程序,我使用了来自外部机器的以下命令: curl -w "@aa" -o /dev/null 'http://myserver/bigfile' 其中文件aa包含如下所示的报告格式: DNS lookup : 0.000 Connect to server (TCP) : 0.004 Connect to server
curl -w "@aa" -o /dev/null 'http://myserver/bigfile'
其中文件aa
包含如下所示的报告格式:
DNS lookup : 0.000
Connect to server (TCP) : 0.004
Connect to server (HTTP/S) : 0.000
Time from start until transfer began: 0.004
Time for redirection (if any) : 0.000
Total time before transfer started : 0.006
Total time : 147.207
Size of download (bytes) : 118263829
Average d/l speed (bytes/s) : 803383.000
你可以看到下载速度很慢:800 kB/s
但当我添加--trace选项时:
curl --trace /dev/null -w "@aa" -o /dev/null 'http://myserver/bigfile'
我有:
DNS lookup : 0.000
Connect to server (TCP) : 0.007
Connect to server (HTTP/S) : 0.000
Time from start until transfer began: 0.007
Time for redirection (if any) : 0.000
Total time before transfer started : 0.008
Total time : 25.430
Size of download (bytes) : 118263829
Average d/l speed (bytes/s) : 4650587.000
这是更快的方式!(4.6MB/s)
仅仅通过添加--trace选项,下载速度怎么可能提高很多
(附加说明:使用--trace ascii选项速度更快:最高可达10MB/s!)
我想这个问题应该与web服务器配置有关,但我不确定,我想知道是否有人已经观察到了错误
类似的行为,或者如果您知道apache2配置的哪一部分可以解释这一点。。。谢谢
新信息
我比较了这两种情况下的tcpdump输出,我发现,
如果没有--trace ascii选项,则会有更多重复的ACK数据包,例如:
Flags [.], ack 444361, win 1392, length 0
Flags [.], ack 444361, win 1392, length 0
Flags [.], ack 444361, win 1392, length 0
Flags [.], ack 445649, win 1414, options [nop,nop,TS val 938602294 ecr 2998737861,nop,nop,sack 3 {108830077:108831365}{108818485:108819773}{108821061:108824925}], length 0
还有更多的ACK-SACK,例如:
Flags [.], ack 444361, win 1392, length 0
Flags [.], ack 444361, win 1392, length 0
Flags [.], ack 444361, win 1392, length 0
Flags [.], ack 445649, win 1414, options [nop,nop,TS val 938602294 ecr 2998737861,nop,nop,sack 3 {108830077:108831365}{108818485:108819773}{108821061:108824925}], length 0
没有什么比使用--trace ascii选项的重复ACK或ACK-SACK数据包更好的了。因此,我想问题与最慢情况下的数据包丢失有关。但是这两台机器和网络都是完全相似的,我已经多次重复了这两个实验,所以唯一的区别来自--trace ascii选项