我有一个VM
正在运行的Xen
虚拟机。虚拟机运行了几个月,网络突然中断了。
Dom0 DomU
.-------. bridge .-------. virtual link .------.
| eth0 |----------| vif55 |-------x------| eth0 |
'-------' '-------' | '------'
|
Seems to be broken somewhere here /
不过,我仍然可以xm console
从Dom0
并访问VM
。
我想了解问题的根源。我确信的是,如果我重新启动,VM
一切都会恢复正常(我知道这一点,因为这不是第一次发生)...
以下是我目前所做的:
来自 DomU
xm console domu
$ sudo su
$ ifconfig
网络连接看起来没问题。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
看上去没坏:
$ 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
还可以。
来自 Dom0
正在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
到网桥:
$ 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
答案1
解开这个谜团的关键在于您从ping
:获得的错误消息sendmsg: No buffer space available
。这意味着数据包不只是在某处被丢弃,它们实际上在某处被“堵塞”了。在物理机中,这表明内核驱动程序和/或硬件存在错误;同样,在虚拟机中,这意味着您在某处找到了低级错误的网络代码。
首先,确保你的补丁是最新的,尤其是在主机上。如果你正在运行一个非常老版本的操作系统,现在可能是时候升级它了——Xen 已经有了很多多年来已修复的错误。
你能暂时,通过增加 sysctl 来解决此问题net.core.wmem_max
。但是,这不是“修复”,只是一种解决方法;大概更大的缓冲区空间最终会再次填满,您将回到现在的状态。
您没有指定如何运行客户机。如果它是完全虚拟化的,则您使用的模拟 NIC 中可能存在错误;virtio 是您的最佳选择,但如果您已经在使用它,请尝试使用e1000
。