为什么双向 iperf 请求在服务器到客户端上冻结?

为什么双向 iperf 请求在服务器到客户端上冻结?

为了诊断两个位置和我们的主要服务器中心之间的网络流量差异,我使用 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 所要求的,主机位于完全不同的位置),在虚拟机上启动双向请求,请求通过(当时想到:“什么……”)。

然后我突然意识到,只有当服务器作为守护进程启动时,我才会遇到这个问题。

我通过测试服务器作为守护进程和非守护进程,以及交换机器的角色来验证我的假设。

摘要:如果您想使用双向请求,请不要将服务器作为守护进程启动。

相关内容