如何诊断 VMware系统问题

 VMware ESX 服务器允许在一台服务器上以虚拟机的形式运行多个类似的或完全不同的操作系统实例,因此合并应用程序的工作负荷就简单而迅速。但是即使采用了最好的、最综合的方案,系统还是可能崩溃。
为了帮助进行故障排除,在 VMware ESX 服务器崩溃时,您可以以多种方法,根据崩溃的现象对问题进行分类。最常见的方法是分类归入到四维矩阵中,矩阵的一个轴上是服务器虚拟机,另外一个轴上是网络存储
此外,还有一个经常出现问题的地方是管理用户界面(Management User Interface,MUI),它不时地会遇到问题。
当崩溃发生时,诊断的第一步是搜集诊断数据 —— 收集完诊断数据之后,您就可以分析数据来找出崩溃的原因了。接下来的几节向您展示了如何搜集数据,到哪里查找信息,以及如何解释信息。
搜集诊断数据
要搜集的第一部分关键数据是由 /usr/bin/vm-support 脚本产生的输出文件。这个文件放在当前目录中,并被命名为 esx-XXXX-XX-XX.XXXX.tgz(其中X是日期/进程标识符信息,例如 esx-2005-01-04.27059.tgz)。
VMware 会定期更新 /usr/bin/vm-support 脚本。为了搜集最精确的信息,请下载并安装最新版本。此外,如果您正遇到 VirtualCenter 的问题,那么还需要搜集 VirtualCenter 日志(对这个问题的诊断不在本文的范围内)。所有的最新版本请参阅参考资料
搜集完这些信息之后,您就可以将 vm-support 输出文件(为二进制模式)传输给适当的支持人员来诊断。要在一个基于 Linux 的系统上提取这个文件,请执行下面的命令:tar zxvf esx-XXXX-XX-XX.XXXX.tgz
诊断系统概述
让我们从系统的高度来看一下系统中的硬件是如何配置和分配的。您可以使用命令行工具来查看,或者查看 /usr/bin/vm-support 文件的输出。
/usr/bin/vm-support 的输出是一个使用 gzip 压缩过的 tar 文件,展开以后包含以下目录:

清单 1. vm-support 输出的布局

etc /
proc
/
root
/
tmp
/
usr
/
var
/
and possibly 
' home '  or  ' vpx '  depending on the location of the .vmx config files.

 

要全面了解 ESX 服务器的布局,可以从 tmp 目录开始。系统 PCI 总线设备的信息在 tmp/lspci.1.*.txt 文件中。运行/sbin/lspci命令您可获得同样的输出。清单 2 展示了一个输出清单的例子。

清单 2. lspci 的输出

/ sbin / lspci
00 : 00.0  Host bridge: ServerWorks: Unknown device  0014  (rev  33 )
00 : 00.1  Host bridge: ServerWorks: Unknown device  0014
00 : 00.2  Host bridge: ServerWorks: Unknown device  0014
00 : 01.0  VGA compatible controller: ATI Technologies Inc Radeon VE QY
00 :0f. 0  ISA bridge: ServerWorks: Unknown device  0203  (rev a0)
00 :0f. 1  IDE  interface : ServerWorks: Unknown device  0213  (rev a0)
00 :0f. 2  USB Controller: ServerWorks: Unknown device  0221  (rev  05 )
00 :0f. 3  Host bridge: ServerWorks: Unknown device  0227
00 : 10.0  Host bridge: ServerWorks: Unknown device  0101  (rev  05 )
00 : 10.2  Host bridge: ServerWorks: Unknown device  0101  (rev  05 )
01 : 01.0  Ethernet controller: Intel Corporation 8254NXX Gigabit Ethernet Controller (rev  04 )
01 : 02.0  Ethernet controller: Intel Corporation 8254NXX Gigabit Ethernet Controller (rev  04 )
02 : 01.0  Ethernet controller: Intel Corporation 8254NXX Gigabit Ethernet Controller (rev  03 )
02 : 01.1  Ethernet controller: Intel Corporation 8254NXX Gigabit Ethernet Controller (rev  03 )
02 : 03.0  Fiber Channel: QLogic Corp QLA231x / 2340  (rev  02 )
02 : 03.1  Fiber Channel: QLogic Corp QLA231x / 2340  (rev  02 )

 

清单 2 给出了机器中所有的 PCI 控制器的一个列表。左边的一列告诉您总线、插槽和插件的功能。例如,规范说明为 02:01.0 的以太网控制器,告诉您这个插件是在 #02 总线的 #01 插槽中,其功能是 #0 。因为还有另一个有着相同的总线和插槽编号(而功能不同)的以太网控制器,所以这是一个两口的控制器。
既然我们已经知道机器中都有什么了,那么我们需要看一下这些资源中哪些分配给了控制台,哪些分配给了虚拟机。为此,可以看一下 tmp/vmkchdev.*.txt 文件,或者使用/usr/sbin/vmkchdev命令,该命令的输出如清单 3 所示。

清单 3. vmkchdev 的输出

/ usr / sbin / vmkchdev  - L
000 : 00.0   1166 : 0014   0000 : 0000  console
PCI device 
1166 : 0014  (ServerWorks)

000 : 00.1   1166 : 0014   0000 : 0000  console
PCI device 
1166 : 0014  (ServerWorks)

000 : 00.2   1166 : 0014   0000 : 0000  console
PCI device 
1166 : 0014  (ServerWorks)

000 : 01.0   1002 : 5159   8086 :34b1 console
PCI device 
1002 : 5159  (ATI Technologies Inc)

000 : 15.0   1166 : 0203   8086 :34b1 console
PCI device 
1166 : 0203  (ServerWorks)

000 : 15.1   1166 : 0213   8086 :34b1 console
PCI device 
1166 : 0213  (ServerWorks)

000 : 15.2   1166 : 0221   8086 :34b1 console
PCI device 
1166 : 0221  (ServerWorks)

000 : 15.3   1166 : 0227   8086 :34b1 console
PCI device 
1166 : 0227  (ServerWorks)

000 : 16.0   1166 : 0101   0000 : 0000  console
PCI device 
1166 : 0101  (ServerWorks)

000 : 16.2   1166 : 0101   0000 : 0000  console
PCI device 
1166 : 0101  (ServerWorks)

001 : 01.0   8086 : 1028   8086 :34b1 vmkernel vmnic3
PCI device 
8086 : 1028  (Intel Corporation)

001 : 02.0   8086 : 1028   8086 :34b1 vmkernel vmnic0
PCI device 
8086 : 1028  (Intel Corporation)

002 : 01.0   8086 :107b  8086 :34b1 vmkernel vmnic1
PCI device 
8086 :107b (Intel Corporation)

002 : 01.1   8086 :107b  8086 :34b1 vmkernel vmnic2
PCI device 
8086 :107b (Intel Corporation)

002 : 03.0   1077 : 2312   1014 :027d vmkernel vmhba0
PCI device 
1077 : 2312  (Q Logic)

002 : 03.1   1077 : 2312   1014 :027d vmkernel vmhba1
PCI device 
1077 : 2312  (Q Logic)

这个输出告诉您哪些设备被分配给 vmkernel,而哪些设备归控制台所有。写着console的条目被分配给了控制台 OS;其他所有的设备都被分配给了虚拟机。
您可以把左边一列的设备与 lspci 的输出相匹配。您也可以在 etc/vmware/hwconfig 文件中找到一些同样的信息。hwconfig 文件也会告诉您哪些设备是在控制台与虚拟机之间共享的。
知道机器中有哪些插件以及这些插件如何分配之后,您需要确保加载了正确的驱动程序。在 tmp/modules.*.txt 文件中,您可以看到控制台 OS 正在使用哪些驱动程序(参见清单 4)。使用/sbin/lsmod命令可以获得同样的输出结果。

清单 4. lsmod 的输出

/ sbin / lsmod
Module                  Size  Used by    Tainted: PF
vmxnet_console         
13212     1
vmnixmod              
177056     3   [vmxnet_console]
e1000                  
68456     0   (unused)
usb
- storage             20028     0
mousedev                
3936     0   (unused)
keybdev                 
1696     0   (unused)
hid                    
17728     0   (unused)
input                   
3488     0   [mousedev keybdev hid]
usb
- ohci                17600     0   (unused)
usbcore                
50112     1   [usb - storage hid usb - ohci]

在 /etc/modules.conf 文件中,可以找到加载在控制台 OS 中的模块的参数设置。
还需要确保也为虚拟机加载了正确的模块。该信息保存在 tmp/vmkmod.*.txt 文件中(参见清单 5)。用/usr/sbin/vmkload命令也可以找到该信息。

清单 5. vmkload_mod 的输出

/ usr / sbin / vmkload_mod  - l
Name        R
/ O Addr    Length      R / W Addr    Length      ID Loaded
vmklinux    
0x4de000      0xf000        0x12438f8     0x53000       1   Yes
nfshaper    
0x4ed000      0x1000        0x129b160     0x1000        2   Yes
e1000       
0x4ee000      0xf000        0x129c168     0x6000        3   Yes
qla2300_604 
0x4fd000      0x19000       0x12fe008     0x22000       4   Yes
bond        
0x516000      0x2000        0x1574b80     0x2000        5   Yes

要看到哪些选项被传递给虚拟机的模块,需要查看 tmp/vmkpcidivy.vmkmod.*.txt 文件(参见清单 6)。

清单 6. vmkpcidivy.vmkmod.*.txt 文件的内容

vmklinux linux
nfshaper.o nfshaper
e1000.o nic
qla2300_604.o fc qlloop_down_time
= 90  qlport_down_retry = 10

基于所连接的存储类型的不同,可能需要不同的光纤存储参数。您需要确保已经设置了存储供应商所推荐的正确设置。
要看到给定模块的可用选项,可以再次使用/usr/sbin/vmkload_mod命令(参见清单 7)。

清单 7. vmklost_mod 的输出结果

# vmkload_mod  - s mptscsi
Using 
/ usr / lib / vmware / vmkmod / mptscsi.o
mptscsih 
string
PortIo 
int , description  " [0]=Use mmap, 1=Use port io "
 

系统存储故障排除
系统存储的很多问题都是由于错误配置或 ESX 服务器之外的问题所引起的。通过阅读 IBM 的红皮书Implementing VMware ESX Server 2.1 with IBM TotalStorage FAStT(参见参考资料中的链接),可以解决大部分的 FAStT 错误配置问题。
引起存储问题的另外一个原因可能是兼容性问题。按照System, I/O, SAN, and Backup Compatabilty Guides(参见参考资料中的链接)去做,可以帮助您解决这些问题。
正确设置之后,配置应该与图 1 类似。

图 1. VMware ESX 多路配置



1.gif


在大部分情况下,您应该会看到,到每个 LUN(逻辑单元号,如果您正在一台需要看到存储设备物理特性的虚拟机上运行应用程序,它就有用了)都有 4 条路径,本地 LUN 和那些故障恢复不紧急的情况除外。在 tmp/vmkmultipath.*.txt 文件中,您可以看到一个典型的布局,这也可以通过执行vmkmultipath命令来看到(参见清单 8)。

清单 8. vmkmultipath 的输出

/ usr / sbin / vmkmultipath  - q
Disk and multipath information follows:

Disk vmhba0:
0 : 0  ( 225 , 278  MB) has  4  paths.  Policy  is  mru.
      vmhba0:
0 : 0        on  (active, preferred)
      vmhba0:
1 : 0        on
      vmhba1:
0 : 0        on
      vmhba1:
1 : 0        on

如果活动路径与首选路径不同,就很可能存在布线、分区或硬件问题。这种崩溃在 var/log/vmkernel 中产生的典型消息可能包括如清单 9 所示的内容。

清单 9. var/log/messages 例子

Jan   6   10 : 21 : 36  vmware01 - ss vmkernel:  0 : 00 : 00 : 57.966  cpu1: 132 ) WARNING: SCSI:  2046 : Manual
switchover to path vmhba3:
0 : 5  begins.
Jan  
6   10 : 21 : 36  vmware01 - ss vmkernel:  0 : 00 : 00 : 57.966  cpu1: 132 ) SCSI:  2050 : Changing active
path to vmhba3:
0 : 5
Jan  
6   10 : 21 : 36  vmware01 - ss vmkernel:  0 : 00 : 00 : 57.967  cpu1: 132 ) WARNING: SCSI:  1683 : Did not
switchover to vmhba3:
0 : 5 . Check Unit Ready Command returned READY instead of NOT READY  for
standby controller .
Jan  
6   10 : 21 : 36  vmware01 - ss vmkernel:  0 : 00 : 00 : 57.967  cpu1: 132 ) WARNING: SCSI:  2089 : Manual
switchover to vmhba3:
0 : 5  completed successfully.

系统网络故障排除
明白哪些网络设备被分配给虚拟机之后,接下来您需要弄明白虚拟机如何来使用这些设备。有关这方面的信息,您需要查看 etc/vmware/hwconfig 和 etc/vmware/netmap.conf。netmap.conf 文件告诉您内部 ESX 交换机的名字,以及它们正在使用哪些设备(参见清单 10)。

清单 10. netmap.conf 的示例文本

# cat netmap.conf
network0.name 
=   " External Linux Net "
network0.device 
=   " vmnic0 "
network1.name 
=   " Internal Windows Net "
network1.device 
=   " vmnet_0 "
network2.name 
=   " Public Web access "
network2.device 
=   " bond0 "

这个例子告诉您这个服务器上有两个虚拟交换机,它们的名字(.name),以及它们正在使用哪些设备(.device)。如果这个设备不是一个真实设备(vmnicbond),那么就没有外部适配器分配给这个虚拟交换机。
如果外部适配器是 bond,那么 etc/vmware/hwconfig 文件还会包含其他一些有价值的信息(参见清单 11)。

清单 11. hwconfig 文件的示例文本

nicteam.vmnic0.team  =   " bond0 "
nicteam.vmnic1.team 
=   " bond0 "

这两个网卡被绑定为一个 NIC。
您可以在几个地方找到有关网络的诊断信息。第一个位置是 proc/vmware/net。您会看到系统中的每个 NIC 和 bond 都有一个子目录。proc/vmware/net/vmnic0/config 的一个例子如清单 12 所示。

清单 12. config 文件的示例文本

VLanHwTxAccel             Yes
VLanHwRxAccel             Yes
VLanSwTagging             Yes
PromiscuousAllowed        No
InterruptClustering       No
Link state:               Up
Speed:                    
1000  Mbps, full duplex
Queue:                    Running
PCI (bus:slot.func):      
1 : 0.0
Minimum Capabilities      
0x0
Device Capabilities       
0x74b
Maximum Capabilities      
0x76b
NICTeamingMaster:         bond0
TeamFailoverBeacon:       Off

Interrupt vector          
0x69
DebugSocket               Closed

这告诉您网络连接正常,可用。如果 Link state 为 down,那么就显示网线或网络交换机端口可能有问题。在同一个目录下,您可以看到有一个 stats 文件,其中列出了各种网络统计信息。
另外一个信息源是 var/log/vmkernel 和 var/log/messages。如果您看到很多下面类型的消息(参见清单 13),那么 NIC 就可能在与交换机协商速率/双工模式时出现了问题。

清单 13. messages 文件的示例文本

Feb   2   12 : 48 : 23  SYNVM7 kernel: bcm5700: eth0 NIC Link  is  DOWN
Feb  
2   12 : 48 : 23  SYNVM7 kernel: bcm5700: eth0 NIC Link  is  UP,  1000  Mbps full duplex

在某些情况下(尤其是 Broadcom NIC 和 Cisco 交换机),您只能在网卡和交换机上都硬编码速率/双工模式。这个问题在 ESX V2.5 中已经解决了,在这个版本中,客户应该将其设置为auto-negotiate。硬编码对于虚拟机是使用 MUI,对于控制台 OS 的以太网是在 /etc/modules.conf 中。
确认网络问题的另外一个来源是 proc/net/nicinfo。这个目录中的文件包含了因网络问题而崩溃的次数统计。如果除了 Rx_Packets、Tx_Packets、Rx_Bytes 或 Tx_Bytes 之外,还有其他统计信息,就说明问题在于外部网络或者可能是 NIC 本身。


虚拟机存储故障排除
如果存在似乎只局限于一台虚拟机的磁盘问题,那么要查看的第一个位置是这个虚拟机的日志文件。这些文件和 .vmx 文件在同一个位置:etc/vmare/vm-list。
在 .vmx 文件中查看这种类型的崩溃信息,您可能会看到下面的信息;

清单 14. vmware.log 文件的示例文本

Feb  02   11 : 39 : 07 : vmx |  DiskVmnixSetupSCSIDevices: failed to  get  handle  for  SCSI Device  0
Feb 
02   11 : 39 : 07 : vmx |  Msg_Post: Error
Feb 
02   11 : 39 : 07 : vmx |  [msg.diskVmnix.scsiopenfailed] Unable to open scsi target
VMFS
- SAN1:mywindowsmachine.vmdk: Device or resource busy( 2 )
Feb 
02   11 : 39 : 07 : vmx |  [msg.vmxlsilogic.poweronFailed]
Feb 
02   11 : 39 : 07 : vmx |  Failed to configure scsi0.
Feb 
02   11 : 39 : 07 : vmx |   ----------------------------------------
Feb 
02   11 : 39 : 07 : vmx |  POST(no connection): Unable to open scsi target VMFS - SAN1:
mywindowsmachine.vmdk: Device or resource busy(
2 )
Feb 
02   11 : 39 : 07 : vmx |
Feb 
02   11 : 39 : 07 : vmx |  Failed to configure scsi0.
Feb 
02   11 : 39 : 07 : vmx |
Feb 
02   11 : 39 : 07 : vmx |  Module VmxLSILogic power on failed.

以说明存储设备出现了问题,或者其他虚拟机正在使用磁盘文件。您可以查看一下进程表清单,从而判断谁正在使用给定的文件。例如,使用“ps -efwww”命令,您可能会看到下面的信息(这也可以在 tmp/ps.*.txt 文件中看到):

清单 15. ps 命令的输出例子

root       2751    0.0    1.7   404252   6612   ?        S <     12 : 29     0 : 00  vmware - mks  - 11   - 13
- - / tmp / vmware - root - 2750 .log  - 2750   - - @ vm = 374709cf368cf239; gui = false
vmdbMemMapHandle
= 0x4 ; vmdbMemMapSize = 0x400000
useSELinux
= false   - / home / vmware / mywindowsmachine / mywindowsmachine.vmx

如果跟文件有关的一个进程挂起了,那么这就会使虚拟机不能对该文件加锁。如果这个存储介质是共享的,那么您就需要确保这个虚拟机没有在另外一个 ESX 服务器上运行。

虚拟机网络故障排除
通常,虚拟机网络的问题都是与系统的错误配置有关,或者可能是速率/双工模式的问题。例如,有一台虚拟机使用了一个 bond 设备,可能其中的一个 NIC 出现了问题而导致网络问题。
有时,您可能会看到虚拟机中的驱动程序有问题。重新安装 VMware 工具会修复这个问题。您可以在 MUI 中从 vlance 切换到 vmxnet 驱动程序上来测试一下,反之亦可。
如果向系统中添加或删除了一个 NIC,那么就可能会出现另外一个问题。这可能导致设备滑动(例如 vmnic1 变成 vmnic0)。在这种情况下,您应该编辑 VM 的配置文件,从而确保它指向正确的 vmnic 或 bond,并且位于正确的网络上。排除这个问题的另外一种方法是将 NIC 修改为控制台 OS,启动这个网卡,并确保您可以 ping 到这个网络中的其他 IP。

MUI 故障排除
如果发生系统突然关机或 panic,MUI 可能在启动时很难打开,因为系统崩溃时 MUI 没有适当的时间来清除剩余的锁文件。
其他的 MUI 崩溃可能包括 MUI 死机,或者在使用命令行进行同步时出现问题。最快的解决方法是试着重新启动一下 MUI。这对虚拟机没有任何影响。为此,请执行下面的 service 命令(参见清单 16):

清单 16. service 命令的输出例子

# service httpd.vmware restart
   Shutting down http.vmware:                              [  OK  ]
   Starting httpd.vmware:                                       [  OK  ]

MUI 时通时断的问题可能跟控制台 OS 的 速度/双工问题有关。请查看 /etc/modules.conf 中的设置。
最后的方法是重新安装 MUI。rpm 在安装 CD 里,通常是 VMware-mui-2.1.2-9638.rpm 的形式(其版本应该与系统上安装的 VMware 的版本匹配 —— 根据运行的 ESX 的版本不同,也可能不是 9638 版本)。您可以使用rpm -e VMware-mui-2.1.2-9638删除旧的 MUI,并使用rpm -i VMware-mui-2.1.2-9638.rpm安装新的 MUI。

再次平稳运行
本文中介绍的技术和例子应该能使您学会定位并解决 VMware 系统的问题:系统的存储和网络问题,虚拟机的存储和网络问题,以及 MUI问题。


参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值