为了诊断两个位置和我们的主要服务器中心之间的网络流量差异,我使用 iperf 使用以下命令记录流量速率:
iperf -c <server ip> -F 500MB_Test_File.zip -n 500M -y C
在注意到上传和下载速率之间的差异后,我想使用该-d
选项,却发现了一个奇怪的行为:虽然传输在客户端到服务器方向上顺利进行,但在另一个方向上却冻结了,似乎没有超时。这是我做的一个测试,表明这与我使用文件作为数据传输源无关:
$ iperf -c <server IP> -d -i 1
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to <server ip>, TCP port 5001
TCP window size: 153 KByte (default)
------------------------------------------------------------
[ 5] local <local ip> port 35144 connected with <server ip> port 5001
[ 4] local <local ip> port 5001 connected with <server ip> port 39967
[ ID] Interval Transfer Bandwidth
[ 5] 0.0- 1.0 sec 9.75 MBytes 81.8 Mbits/sec
[ 4] 0.0- 1.0 sec 10.7 MBytes 89.3 Mbits/sec
[ 5] 1.0- 2.0 sec 10.9 MBytes 91.2 Mbits/sec
[ 4] 1.0- 2.0 sec 10.9 MBytes 91.3 Mbits/sec
[ 5] 2.0- 3.0 sec 11.0 MBytes 92.3 Mbits/sec
[ 4] 2.0- 3.0 sec 10.9 MBytes 91.4 Mbits/sec
[ 5] 3.0- 4.0 sec 11.0 MBytes 92.3 Mbits/sec
[ 4] 3.0- 4.0 sec 10.9 MBytes 91.4 Mbits/sec
[ 5] 4.0- 5.0 sec 11.0 MBytes 92.3 Mbits/sec
[ 4] 4.0- 5.0 sec 10.9 MBytes 91.4 Mbits/sec
[ 5] 5.0- 6.0 sec 11.0 MBytes 92.3 Mbits/sec
[ 4] 5.0- 6.0 sec 10.9 MBytes 91.4 Mbits/sec
[ 5] 6.0- 7.0 sec 10.9 MBytes 91.2 Mbits/sec
[ 4] 6.0- 7.0 sec 10.9 MBytes 91.4 Mbits/sec
[ 5] 7.0- 8.0 sec 11.2 MBytes 94.4 Mbits/sec
[ 4] 7.0- 8.0 sec 10.9 MBytes 91.4 Mbits/sec
[ 5] 8.0- 9.0 sec 11.1 MBytes 93.3 Mbits/sec
[ 5] 9.0-10.0 sec 11.1 MBytes 93.3 Mbits/sec
[ 5] 0.0-10.0 sec 109 MBytes 91.4 Mbits/sec
^C^C
我使用的是 iperf 2.0.5。客户端和服务器都是 Linux 机器,服务器是虚拟的。
编辑
关注后马里乌斯·马图蒂亚根据我的建议,我在客户端计算机上启动了 iperf 服务器,然后尝试从 VM 发出双向请求,下面是我得到的结果:
[host@centos ~]$ iperf -c <client_id> -d -i 1
bind failed: Address already in use
------------------------------------------------------------
Client connecting to <client_id>, TCP port 5001
TCP window size: 19.3 KByte (default)
------------------------------------------------------------
[ 4] local <server_id> port 40175 connected with <client_id> port 5001
[ ID] Interval Transfer Bandwidth
[ 4] 0.0- 1.0 sec 11.6 MBytes 97.5 Mbits/sec
[ 4] 1.0- 2.0 sec 9.50 MBytes 79.7 Mbits/sec
[ 4] 2.0- 3.0 sec 10.6 MBytes 89.1 Mbits/sec
[ 4] 3.0- 4.0 sec 11.0 MBytes 92.3 Mbits/sec
[ 4] 4.0- 5.0 sec 11.0 MBytes 92.3 Mbits/sec
[ 4] 5.0- 6.0 sec 10.9 MBytes 91.2 Mbits/sec
[ 4] 6.0- 7.0 sec 11.0 MBytes 92.3 Mbits/sec
[ 4] 7.0- 8.0 sec 10.8 MBytes 90.2 Mbits/sec
[ 4] 8.0- 9.0 sec 8.38 MBytes 70.3 Mbits/sec
[ 4] 9.0-10.0 sec 9.75 MBytes 81.8 Mbits/sec
[ 4] 0.0-10.0 sec 105 MBytes 87.8 Mbits/sec
[host@centos ~]$
我以为,太好了,命令自动停止了,但我只在一个方向上得到了结果。直到我查看了这次启动 iPerf 服务器的机器,看到了这个:
$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[ 4] local <client_ip> port 5001 connected with <server_ip> port 40179
------------------------------------------------------------
Client connecting to <server_ip>, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[ 6] local <client_ip> port 36243 connected with <server_ip> port 5001
[ ID] Interval Transfer Bandwidth
[ 6] 0.0-10.0 sec 45.4 MBytes 38.0 Mbits/sec
[ 4] 0.0-10.2 sec 64.2 MBytes 52.8 Mbits/sec
因此我开始思考,也许我需要在连接的两端启动一个服务器作为守护进程,以使双向命令正常工作,事实上,我得到了类似的结果,只在事务的一侧输出性能,但因此我没有任何办法在另一侧获取性能数据:我确实启动了 iperf 守护进程,-D > iperflog
但日志似乎没有填充......
是不是应该这样,iperf 应该在两台机器上运行,以便双向请求能够通过?bind failed: Address already in use
当我启动 iperf 客户端并且服务器在两边运行时,我收到的消息是否能提示问题可能出在哪里?我感觉我所做的事情不应该是标准程序……
答案1
正如我所怀疑的,Marius 也证实了客户端和服务器不能在同一台机器上运行。因此,我等待合适的时机杀死守护进程,这样它就不会与客户端同时运行,仅在-s
主机上启动服务器(正如 Marius 所要求的,主机位于完全不同的位置),在虚拟机上启动双向请求,请求通过(当时想到:“什么……”)。
然后我突然意识到,只有当服务器作为守护进程启动时,我才会遇到这个问题。
我通过测试服务器作为守护进程和非守护进程,以及交换机器的角色来验证我的假设。
摘要:如果您想使用双向请求,请不要将服务器作为守护进程启动。