为了测试程序在弱网环境下的表现,通常需要创造一个"不那么稳定"的网络环境,但这种模拟十分不好控制变量,比如希望控制网络延迟在700ms时,现实环境则是难以实现的,那有什么解决的办法呢?
可以在Linux下使用tc
命令来模拟延迟。
配置网络延迟700ms
tc qdisc add dev eth0 root netem delay 700ms
配置后,测试网络
[root@primary linuxscript]# ping baidu.com
PING baidu.com (110.242.68.66) 56(84) bytes of data.
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=1 ttl=251 time=710 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=2 ttl=251 time=710 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=3 ttl=251 time=710 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=4 ttl=251 time=710 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=5 ttl=251 time=710 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=6 ttl=251 time=710 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=7 ttl=251 time=710 ms
^C
--- baidu.com ping statistics ---
8 packets transmitted, 7 received, 12% packet loss, time 7414ms
rtt min/avg/max/mdev = 710.051/710.084/710.130/0.901 ms
可以看到网络延迟为710ms,然后,删除该网络延迟
tc qdisc del dev eth0 root netem delay 700ms
再次测试
[root@primary linuxscript]# ping baidu.com
PING baidu.com (110.242.68.66) 56(84) bytes of data.
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=1 ttl=251 time=10.0 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=2 ttl=251 time=10.1 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=3 ttl=251 time=10.1 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=4 ttl=251 time=10.0 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=5 ttl=251 time=10.0 ms
64 bytes from 110.242.68.66 (110.242.68.66): icmp_seq=6 ttl=251 time=10.1 ms
^C
--- baidu.com ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5006ms
rtt min/avg/max/mdev = 10.008/10.077/10.123/0.044 ms
可以看到正常情况下的网络延迟为10ms。
注意
命令中的eth0是所配置与测试的网卡名称。