我有一个运行在Xen上的VM 。 虚拟机运行良好数月,突然networking访问崩溃。
Dom0 DomU .-------. bridge .-------. virtual link .------. | eth0 |----------| vif55 |-------x------| eth0 | '-------' '-------' | '------' | Seems to be broken somewhere here /
不过,我仍然可以从Dom0 xm console访问VM 。
我想了解问题的由来。 我所知道的是,如果我重新启动VM一切都将恢复正常(我知道这是因为它不是第一次发生)…
这是我到目前为止所做的:
xm console domu $ sudo su $ ifconfig
networking连接看起来不错。 IP是好的,但是这些命令中的任何一个都会失败:
$ ping dom0 $ ping 8.8.8.8
我得到的错误是:
$ ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. ping: sendmsg: No buffer space available ^C --- 8.8.8.8 ping statistics --- 1 packets transmitted, 0 received, 100% packet loss, time 24002ms
我的fail2ban看起来fail2ban :
$ tail -n2 fail2ban.log 2015-07-31 19:41:52,851 fail2ban.actions[1854]: WARNING [ssh] Ban 218.65.30.61 2015-07-31 19:51:53,618 fail2ban.actions[1854]: WARNING [ssh] Unban 218.65.30.61 $ iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination fail2ban-apache tcp -- anywhere anywhere multiport dports http,https fail2ban-ssh tcp -- anywhere anywhere multiport dports ssh Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain fail2ban-apache (1 references) target prot opt source destination RETURN all -- anywhere anywhere Chain fail2ban-ssh (1 references) target prot opt source destination RETURN all -- anywhere anywhere
由df给出的可用磁盘空间看起来不错。
VM正在运行:
$xmlist | grep domu domu 55 4096 4 -b---- 670393.8
它连接到vif55 :
$iptables -L | grep domu ACCEPT all -- domu anywhere PHYSDEV match --physdev-in vif55.0
vif55可用:
$ ifconfig | grep vif55.0 vif55.0 Link encap:Ethernet HWaddr fe:ff:ff:ff:ff:ff inet6 addr: xxxx::fcff:ffff:xxxx:ffff/64 Scope:Link UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1 RX packets:60965324 errors:0 dropped:0 overruns:0 frame:0 TX packets:130097868 errors:0 dropped:22 overruns:0 carrier:0 collisions:0 txqueuelen:32 RX bytes:3441407339 (3.2 GiB) TX bytes:161037189 (153.5 MiB)
vif55连接到networking桥:
$ brctl show bridge name bridge id STP enabled interfaces eth0 8000.10604ba1432a no peth0 vif1.0 vif10.0 vif11.0 vif48.0 vif51.0 vif55.0 vif56.0 vif57.0 vif58.0 vif59.0 vif60.0 vif9.0
这个秘密的关键是你从ping得到的错误: sendmsg: No buffer space available 。 这意味着数据包不会被丢在某个地方,实际上它们正在客户的某处“堵塞”。 在物理机器上,这表示内核驱动程序和/或硬件是越野车; 同样,在虚拟机中,这意味着你已经有了低级别的networking代码。
首先,确保你的补丁是最新的,特别是在主机上。 如果你正在运行一个非常旧的操作系统版本,现在可能是升级的时候了 – 多年来Xen已经修复了很多 bug。
您可以暂时通过增加net.core.wmem_max sysctl来解决这个问题。 但是,这不是一个“修复”,只是一个解决方法; 据推测,较大的缓冲空间最终会再次填满,你会回到你现在的位置。
你不指定你如何运行客人。 如果它是完全虚拟化的,则可能是您正在使用的模拟NIC中存在一个错误; virtio一个是你最好的select,但如果你已经在使用它,请尝试e1000 。