换出10.04-> 12.04后,KVM VM随机挂在Precise上


3

我有近140个使用KVM在Ubuntu 10.04上运行的虚拟机。VM中的操作系统不同,但主要是10.04 VM。

他们的成绩低于10.04。我完全擦除了OS磁盘,并使用dirsh定义其配置文件引入了所有现有VM。我已经在运行3-5个VM的服务器上完成了此任务,并且运行良好,但是这些服务器各自运行20-25个VM。

升级后,我注意到以下内容:

  1. 一些虚拟机的时间变得疯狂。就像他们被引导并认为是2个月前一样。
  2. 执行du / df不再显示最初创建的img文件的大小。仅在它们中使用了什么。因此,当您安装40G Ubuntu时,在du中显示为2G,ls -lh显示正确
  3. 一些(不是全部)VM的行为就像它们几乎无法写入磁盘一样,好像它们用完了空间,但它们有55%以上的可用空间。删除文件后,VM再次开始工作。
  4. VM通常仍可ping通,但控制台和SSH失败。输入密码后,某些SSH连接会挂起。

磁盘映像位于XFS上。

版本信息:

  • 操作系统:Ubuntu 12.04
  • 内核:3.2.0-30-泛型
  • kvm 1:84 + dfsg-0ubuntu16 + 1.0 + noroms + 0ubuntu14.1虚拟过渡包从kvm到qemu-kvm
  • 从qemu到qemu-kvm的qemu 1.0 + noroms-0ubuntu14.1虚拟过渡包
  • qemu通用1.0 + noroms-0ubuntu14.1 qemu通用功能(BIOS,文档等)
  • qemu-kvm 1.0 + noroms-0ubuntu14.1 i386和amd64硬件上的完全虚拟化
  • qemu-utils 1.0 + noroms-0ubuntu14.1 qemu实用程序
  • seabios 0.6.2-0ubuntu2.1旧版BIOS实现,可以用作coreboot负载
  • 用于Bochs和Qemu仿真VGA卡的vgabios 0.6c-2ubuntu3 VGA BIOS软件
  • libvirt库的libvirt-bin 0.9.8-2ubuntu17.5程序
  • libvirt0 0.9.8-2ubuntu17.5库,用于与不同的虚拟化系统接口

我也尝试过以相同的结果构建14.7的qemu / kvm。

系统管理程序或VMS上的日志(libvirt,qemu,syslog)中没有任何条目。

<domain type="kvm">
  <name>template</name>
  <uuid>9b5004aa-e4e1-11de-9137-003048dad824</uuid>
  <memory>1048576</memory>
  <currentMemory>1048576</currentMemory>
  <vcpu>2</vcpu>
  <os>
    <type arch="x86_64" machine="pc">hvm</type>
    <boot dev="hd"/>
    <kernel>/kvm/kernels/vmlinuz-2.6.32-24-server</kernel>
    <initrd>/kvm/kernels/initrd.img-2.6.32-24-server</initrd>
    <cmdline>ro root=/dev/vda</cmdline>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset="utc"/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type="file" device="cdrom">
      <target dev="hdc" bus="ide"/>
      <readonly/>
    </disk>
    <disk type="file" device="disk">
      <source file="/kvm/images/template.img"/>
      <target dev="vda" bus="virtio"/>
    </disk>
    <interface type="bridge">
      <mac address="de:ad:3e:5b:47:99"/>
      <source bridge="br2"/>
      <model type="virtio"/>
    </interface>
    <serial type="pty">
      <target port="0"/>
    </serial>
    <console type="pty">
      <target port="0"/>
    </console>
    <graphics type="vnc" port="-1" listen="0.0.0.0" autoport="yes" keymap="en-us"/>
  </devices>
</domain>

在正在运行的VM上进行跟踪,我看到了这一点:

read(19, "\2\0\0\0\0\0\0\0\0\0\336\255\276\357\10\353\0\f\333\350\275\0\10\0E\0\0B\214\212@\0"..., 69632) = 90
ioctl(6, KVM_IRQ_LINE_STATUS, 0x7fff290e65f0) = 0
read(19, 0x7f7967430a54, 69632)         = -1 EAGAIN (Resource temporarily unavailable)
select(20, [7 8 11 15 16 17 18 19], [], [], {1, 0}) = 1 (in [8], left {0, 999819})
read(16, 0x7fff290f6710, 16)            = -1 EAGAIN (Resource temporarily unavailable)

任何帮助,将不胜感激。

编辑

我已经从Ubuntu升级到了最新的内核版本。仅在运行iozone时注意到AppArmor的一些拒绝,因此我在测试系统上完全删除了apparmor。将qemu / kvm和支持库升级到12.10中的库。我还尝试使用pc-0.12和pc-0.14版本。

在启动后的一两个小时内,所有文件仍处于锁定状态。

Answers:


1

从KVM主机的角度看,似乎有某种事正在阻止VM。可以尝试的几件事:

  • 发生这种情况时,KVM主机CPU使用率会激增吗?
  • vmstat显示什么(运行vmstat 5)?

样本vmstat

% vmstat 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 806972 396372 2369348    0    0    13    26   11  197  4  4 90  2  0   
 0  0      0 808908 396380 2367056    0    0     0    18 6453 13546  2  2 95  1  0  
 0  0      0 807508 396380 2370296    0    0     0    22 6438 13662  2  3 95  1  0  
 0  0      0 809892 396392 2367068    0    0     0    56 6273 13189  1  2 95  1  0  
  • iostat显示什么(运行iostat -dx 5)?

样品iostat

% iostat -dx 5
Linux 2.6.35.14-106.fc14.x86_64 (grinchy)   01/28/2013  _x86_64_    (4 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.61    11.29    1.14    4.07    58.12   116.23    33.46     0.17   31.81   7.18   3.74
dm-0              0.00     0.00    0.83    2.38    34.75    19.02    16.77     0.10   31.11   2.17   0.70
dm-1              0.00     0.00    0.00    0.00     0.04     0.00     8.00     0.00    5.30   2.70   0.00
dm-2              0.00     0.00    0.92   12.37    23.18    97.21     9.06     0.79   59.40   2.46   3.27

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00    12.20    0.00    3.00     0.00   112.00    37.33     0.05   16.73  13.87   4.16
dm-0              0.00     0.00    0.00    1.40     0.00    11.20     8.00     0.05   38.29  12.43   1.74
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00   12.60     0.00   100.80     8.00     0.06    4.37   1.92   2.42

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00    11.60    0.00    2.60     0.00   107.20    41.23     0.04   13.46  13.23   3.44
dm-0              0.00     0.00    0.00    0.60     0.00     4.80     8.00     0.01   15.00  13.00   0.78
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00   12.80     0.00   102.40     8.00     0.13   10.05   2.08   2.66

在CentOS 5.x上运行KVM时,我们遇到了类似的问题,但是自从迁移到CentOS 6.x以来,它没有出现。同样,在调试问题时,它似乎是特定于Guest VM的。我的意思是某些来宾VM似乎会在整个KVM主机上引起此问题。


在挂起虚拟机以及虚拟机完全关闭的情况下,我已经对系统进行了概要分析,没有区别。我已经看到您之前指出的问题。但是这些也不会引起大量的I / O等待。他们的CPU占用了该VM,但我无法确定该VM实际在做什么。
Joe Coder

0

我对此进行了一段时间的排查,发现它与VM本身使用的内核有关。他们正在使用2.6.32。我们升级到2.6.38-10,它修复了一个计时器错误,这似乎是罪魁祸首。他们已经运行了11个月,而问题没有再次出现。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.