臭臭 发表于 2010-3-11 10:08

如何解决Windows服务器崩溃的问题?

出处:IT专家网论坛
 突然,你的Windows服务器刚刚经历了蓝屏死机(BSOD),求助台热线非常繁忙。这台服务器重启,并且是你这周经历的第四次崩溃,用户变得无法控制。更糟的是你面临着打电话,到处奔走以解决问题,而且厂商会相互指责是对方的问题。
突然,你的Windows服务器刚刚经历了蓝屏死机(BSOD),求助台热线非常繁忙。这台服务器重启,并且是你这周经历的第四次崩溃,用户变得无法控制。更糟的是你面临着打电话,到处奔走以解决问题,而且厂商会相互指责是对方的问题。

  现在该是你解决问题的时候了。有了崩溃转储分析(crash dump analysi)的基础知识和一些简单的命令,你能决定涉及什么驱动。然后,通过智能搜索互联网,你可定位解决崩溃的热修复或工作区。

  这一系列三篇文章包含你所需的解决Windows服务难题的工具和步骤。

  下图1描述了崩溃发生时的样子。如你所见,当服务器崩溃时,物理内存(RAM)的内容将写到系统分区上的页面文件。重启时,页面文件写入memory.dmp文件,这个文件也宿主在系统分区里。最后,在服务器重启后,你能使用Windows内核调试器(WinDbg)与微软的符号服务器来分析崩溃原因。

要帮助解决崩溃转储分析,需要注意三个主要领域。首先,当发生意外状态时,服务器必须能配置成可以产生崩溃。接下来,你需要从微软下载Windows调试器,设置符号服务器路径。最后,使用调试器用几个简单命令分析崩溃。现在,我们分别来看看这三个领域。

  配置dump

  要配置服务器产生崩溃,使用图2所示的Control Panel | System applet | Advanced tab | Startup | Recovery设置。你能从三种类型的内存转储文件选择:small、kernel或complete。默认下,Windows将生产small,服务器崩溃时产生“mini-dump”文件。有时候这样会包括足够的调试信息,不过一般需要一个内存转储文件。在罕见环境下,可能需要配置complete内存转储捕获所需的调试信息。关于配置内存转储文件的更多信息,请参见Microsoft KB article 254649。


安装Windows调试器

  下一步就是安装Windows内核调试器工具,这个工具可以从微软官网免费下载。取决于你计划分析的服务器的架构,有三种类型的调试器,即x86、x64和IA64。安装WinDbg后,你必须建立symbol path,常用的符号路径是SRV*c:\symbols*http://msdl.microsoft.com/download/symbols。关于建立调试器符号路径的更多信息,请参见Microsoft KB 311503。

  分析崩溃

  现在已经配置服务器产生内存转储和在正确的符号路径里安装了调试器,就可以分析崩溃原因了。有两种方法启动调试器:从程序组“Debugging Tools for Windows”或者从使用WinDbg命令出现的DOS提示符启动。在调试器里面,使用文件下拉菜单“Open crash dump”指向你要调试的转储文件。

  当载入转出文件时,你将发现调试器的屏幕分为两部分:占用了窗口大部分的输出窗和底部的命令提示符。第一个使用的命令是:

  !analyze –v

  这个命令将对转储执行初步的分析,并对哪个驱动导致崩溃提供猜测。这个命令显示给你的第一件事是调试校验类型(也叫做中止码)和参数。调试校验类型非常重要,应该在你上网搜索可能原因和修复时用到。在下面的例子中,WinDbg显示了调试校验类型LM_SERVER_INTERNAL_ERROR (stop code 54)。在这种情况下,如果你的微软官网搜索LM_SERVER_INTERNAL_ERROR,应该在Microsoft KB 912947里发现已知问题和修复文档。

  3: kd> !analyze -v ***************************************************** * Bugcheck Analysis * *****************************************************

  LM_SERVER_INTERNAL_ERROR (54)

  Arguments:

  Arg1: 00361595

  Arg2: e8aab501

  Arg3: 00000000

  Arg4: 00000000

  !analyze –v命令将列出导致崩溃问题的驱动。在我们的例子中,WinDbg精确地调出是srv.sys驱动导致了崩溃。

  Probably caused by: srv.sys (srv!SrvVerifyDeviceStackSize+78 )

  另外几个有用的命令提供了更多关于崩溃的信息,包括:

  !thread——列出目前的执行线程

  kv——显示栈追踪,暗示所调用的驱动和功能

  lm t n——显示所安装驱动及其数据的列表

  最后,你应该注意到Windows调试器的在线帮助很好用。在你查找导致崩溃的中止码并使用在线帮助找解决问题的办法的时候尤其有用。要找到中止码列表,去到帮助下拉菜单并选择Contents | Debugging Techniques | Bug Checks (Blue Screens) | Bug Check Code Reference。然后扫描列表定位中止码位置。

  多数人认为调试崩溃留给专家去做,但是有一点基础知识和一些简单命令,任何人都能识别崩溃并作出贡献。
页: [1]
查看完整版本: 如何解决Windows服务器崩溃的问题?