如何诊断VMware系统问题(1)
2007-11-09 23:47:24 来源:WEB开发网核心提示:原文地址:http://www-128.ibm.com/developerworks/cn/linux/l-vmware/index.htmlGreg Lindley, 系统支持工程师, IBM2005 年 5 月 15 日尽管采用了弹性最好的方案,系统也有崩溃的时候,如何诊断VMware系统问题(1),本文就为您提供
原文地址:http://www-128.ibm.com/developerworks/cn/linux/l-vmware/index.html
Greg Lindley, 系统支持工程师, IBM
2005 年 5 月 15 日
尽管采用了弹性最好的方案,系统也有崩溃的时候。本文就为您提供一些解决系统崩溃的指导准则,包括到哪里去查看问题,以及如何解释问题,并提供一些问题修正的解答,本文的一切都是围绕 VMware ESX 框架进行的。
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/
根据 .vmx 配置文件的位置的不同,还可能包含 ‘home’ 或 ‘vpx’。
......................................................................................................
要全面了解 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 的输出
.......................................................................................................
在 /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"
.......................................................................................................
Greg Lindley, 系统支持工程师, IBM
2005 年 5 月 15 日
尽管采用了弹性最好的方案,系统也有崩溃的时候。本文就为您提供一些解决系统崩溃的指导准则,包括到哪里去查看问题,以及如何解释问题,并提供一些问题修正的解答,本文的一切都是围绕 VMware ESX 框架进行的。
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/
根据 .vmx 配置文件的位置的不同,还可能包含 ‘home’ 或 ‘vpx’。
......................................................................................................
要全面了解 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 的输出
.......................................................................................................
在 /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"
.......................................................................................................
更多精彩
赞助商链接