我有一个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
这个谜团的关键是你从中得到的错误
ping
:sendmsg: No buffer space available
。这意味着数据包不只是被丢弃在某个地方,它们实际上是在某个地方的来宾中“阻塞”了。在物理机中,这表明内核驱动程序和/或硬件存在错误;同样,在 VM 中,这意味着您在某处有低级错误的网络代码。首先,确保您使用最新的补丁,尤其是在主机上。如果您正在运行一个非常旧的操作系统版本,那么现在可能是升级它的时候了——Xen 多年来已经修复了很多错误。
您可以
net.core.wmem_max
暂时通过增加sysctl.xml来解决它。但是,这不是“修复”,只是一种解决方法;大概较大的缓冲区空间最终会再次填满,您将回到现在的位置。您没有指定如何运行来宾。如果它是完全虚拟化的,那么您正在使用的模拟 NIC 中可能存在错误;virtio 是您最好的选择,但如果您已经在使用它,请尝试使用它
e1000
。