在生产环境中,有一台kvm的带宽占用很大,导致网络异常,迫切需要尽快定位带宽滥用的vm。

该kvm有4个物理网卡,其中eth0/eth1绑定为bond0,eth2/eth3绑定为bond1,然后又在bond0的基础上创建了几个vlan子接口,分别是bond0.111、bond0.300,接着将它们跟br111和br300桥接起来。

首先需要通过bond0.x来确定是哪个桥接口的流量过大iftop -i bond0.111,确定之后再通过iftop -i vnetX来确定引起问题的vnet,最后通过virsh domiflist <dom-id>来确定故障vm。

以下是使用iperf来模拟故障vm所引发的大流量。

$ sudo virsh list
 Id    Name                           State
----------------------------------------------------
 5     w2k3-wpt-2M                    running
 40    c6-64-ntopng                   running
 44    u1404-64-ntopng                running
 45    c6-64-tester                   running

$ sudo virsh domiflist 45
Interface  Type       Source     Model       MAC
-------------------------------------------------------
vnet2      bridge     br300      virtio      52:54:00:3a:bf:6f
vnet3      bridge     br111      virtio      52:54:00:63:39:67

在vm:u1404-mgmt-1(192.168.111.32)上启用

$ sudo iperf -s

在vm:c6-64-tester(192.168.111.9)中启用

$ sudo iperf -c 192.168.111.32 -i 2 -t 3600

在kvm host中

$ sudo iftop -i vnet3

这就能看到c6-64-tester的网卡eth1(映射到kvm host中的vnet3)的流量了。