过期罐头电脑论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6876|回复: 0
收起左侧

Windows Server崩溃的三大常见诱因与避免方式

[复制链接]
jiangm1ao 2011-6-21 04:33:50 | 显示全部楼层
Windows Server崩溃的方式有很多种,但绝大多数都属于三大类:旧版杀毒软件、不兼容的存储驱动程序和过多的过滤驱动。在剖析 了来自世界各地近十年差不多1000次的系统崩溃后,我可以确认这些都是你想要避免的隐患。

下面让我们来详细看一下这三种服务器系统崩溃的细节,并分别介绍一下避免它们的最佳方法。
<strong style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; WORD-WRAP: break-word"></b>
<strong style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; WORD-WRAP: break-word">杀毒软件
</b>
到目前为止,最常见的Windows Server崩溃是由旧版杀毒软件所致。一切 的杀毒软件都是使用设备驱动程序,更具体地说是“过滤驱动”来拦截I / O(读/写)恳求 并执行额外的检查。杀毒软件驱动程序将检查的内容与已知的病毒定义文件进行对比,以确保没有感染病毒。

过滤驱动包含内核模式的代码,它们会与操作系统底层的内核函数和数据构造 互相 作用这些函数和数据构造 包括那些预期会在相应设备驱动调用时呈现的预定义参数和数据类型。假如 函数传送 的数据类型错误或参数数目不对,就会发作 导致内核模式中系统崩溃的错误。

当开发人员在不同版本的操作系统之间(如服务包更新或新版本操作系统发布)修改这些内核函数或数据构造 时,问题就出现了。虽然微软在测试设备驱动程序对一切 操作系统改动 的兼容性方面做得很好,但它显然没有测试第三方设备驱动程序来确保它们可兼容。因而 ,当旧版杀毒驱动程序偶尔 遭遇了这些更改,最终就会导致系统崩溃。其它过滤驱动也容易遭到 这种问题影响,但是杀毒软件驱动程序是最容易受影响的一个。

让我们来看一个例子:

下面是一个Stop 0x8E bugcheck -KERNEL_MODE_EXCEPTION_NOT_HANDLED的系统崩溃。在Windows debugger中用命令!analyze –v显示了它的堆栈模式。从下往上读,我们就看到一个NtCreateFile的函数调用,最终引入了buggydrv,从而导致bugcheck。使用命令!lmi buggydrv可以显示出驱动程序的日期是2006年,而操作系统Windows Server 2003 SP2是2007年发布的。现在我们就知道,旧版的杀毒驱动程序并没有对新版的操作系统进行测试。

201161144638959.png

在这个例子中,此种系统崩溃已经被厂商标识为已知问题并文档化,新版杀毒软件已经可以用来避免系统崩溃。事实上,绝大多数你遇到的Windows Server崩溃,都曾在他人 身上发作 过,它们的解决方法通常已经记录在互联网上的某个地方。因而 ,很重要的一点是,一定要记住即便 只是一个服务包更新。在更新操作系统时也该第一时间与第三方厂商确认是否有相应的软件更新。
<strong style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; WORD-WRAP: break-word"></b>
<strong style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; WORD-WRAP: break-word">存储驱动程序不兼容
</b>
另一种最常见的系统崩溃是由不兼容的存储驱动程序所致。如你所知,第三方存储厂商提供设备驱动程序来控制它们的主机总线适配器(HBA)并用于访问存储设备。像Qlogic、Emulex和惠普(HP)等厂商都有不同的设备驱动程序,但它们都依赖于微软的Storport驱动程序。Storport驱动程序提供一套通用程序,这些特定的厂商驱动程序在执行I / O操作时使用它们。

这种问题的出现方式与杀毒软件驱动程序的不兼容性很类似 。当厂商修改其专用的驱动程序时,它们必须重新与当前版本的Storport进行测试,以确保依然 兼容。同样的道理,当更新Storport版本时,一切 的HBA驱动程序也必须重新测试,以保证它们依然 与新版的Storport驱动程序兼容。在Windows Server 2003中当你需要. 考虑Storport的50多个修补程序时,这才是一个真正的应战 。

经历 规律 是,在更新Storport驱动之前与你的第三方厂商确认HBA驱动程序是否有相应的更新,反之亦然。如何才能知道哪个存储驱动程序依赖于Storport?侥幸 的是,有一个叫Dependency Walker(depends.exe)的免费工具,可以提醒 驱动程序间的依赖关系。

下载并解压缩后,运行depends.exe,使用文件下拉菜单选择你所关注的驱动程序。在这个例子中,我选择了驱动程序Hpcisss2.sys,它应用于HP的磁盘阵列。正如你下面可以看到的,该工具显示,驱动程序Hpcisss2依赖于STORPORT.SYS和Ntoskrnl.exe。

201161144638959.png

<strong style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px; WORD-WRAP: break-word">过多的过滤驱动
</b>
第三种最常见的Windows Server崩溃类型与安装了太多的过虑驱动时的堆栈溢出条件相关。任何可以拦截I / O恳求 并执行额外功能的驱动程序都被觉得 是一个过滤驱动。我们已经知道,杀毒驱动程序就是一个过滤驱动。其它过虑驱动包括磁盘配额管理、磁盘镜像和备份代理等,在这里我只罗列 了几个。
虽然安装多个过滤驱动自身 不会有问题,但是在当这些驱动程序以递归的方式互相 调用并因而 耗尽了有限的内核堆栈空间时,状况 就会发作 改动 。依据 计算机体系构造 ((x86=12 KB,x64=24 KB),一切 设备驱动程序使用的内核堆栈空间是有限的。当内核堆栈空间耗尽时,就会出现一个Stop 0x7F bugcheck导致系统崩溃,就像微软数百篇文档的描绘 一样。

基本 没有方法 提供额外的内核堆栈空间来包容 更多的过虑驱动。独一 的选择是辨认 这些过滤驱动,禁用或卸载其中不需要. 的那些。有一个内置在Windows Server操作系统中的工具叫FLTMC(过滤器管理器控制程序),它可以让你辨认 出安装的过滤驱动。

正如你看到的,有很多原因会导致Windows Server崩溃。但是绝大多数服务器停机都是由上述的原因形成 的。你完全可以通过两种方式解决这些问题,它们是在升级Windows操作系统或更新相关的热修补程序的同时更新第三方驱动程序和限制未使用的过滤驱动的数量。
201161144638959.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

一键重装系统|雨人系统下载|联系我们|网站地图|过期罐头电脑论坛

GMT+8, 2024-11-24 09:46 , Processed in 0.059445 second(s), 29 queries .

官方免责声明:本站内容来自网友和互联网.若侵犯到您的版权.请致信联系,我们将第一时间删除相关内容!

Powered by Discuz!

专注于win7_win10_win11系统下载装机

© 2010-2023 GQGTPC.Com

快速回复 返回顶部 返回列表