共用方式為


Windows Server 2003服务器svchost.exe进程意外停止crash问题分析

最近经常碰到一些基于svchost.exe的服务意外停止的案例。(例如:Computer Browser service、Server service、Windows Management Instrumentation service等停止提供服务)。

首先我们看一下什么是svchost.exe, 以及为什么这么多的服务都会受到svchost.exe的影响:

- Svchost.exe 是计算机上的一个进程,该进程包含Windows 用于执行各种功能的多个或单独服务。例如,Computer Browser service和Server service使用同一个 svchost.exe 进程宿主的服务。

- 可以有多个 svchost.exe 的实例在计算机上运行,其中每个实例都包含不同的服务。svchost.exe 的一个实例可能宿主程序的单个服务,而另一个实例则可能宿主与 Windows 相关的多个服务。可以在CMD窗口下运行tasklist -svc命令查看在 svchost.exe 的每个实例下正在运行的服务。见下图:

上图中如果PID为884的svchost.exe意外终止,那么所有对应于该PID的服务都将停止服务。可见造成的影响非常巨大。

什么是 svchost.exe?
https://windows.microsoft.com/zh-cn/windows-vista/What-is-svchost-exe#

那么svchost.exe意外终止后,如何解决呢?一般可以尝试下面的步骤:

1.       首先您可以手工启动受到影响的服务,或重启计算机以尽快从故障中恢复。

2.       其次可以检查计算机是否安装了以下补丁:

MS08-067 Security Bulletin - https://www.microsoft.com/technet/security/Bulletin/MS08-067.mspx 

KB932762 https://support.microsoft.com/kb/932762/EN-US  

3.       如果您使用了System Center产品,该产品针对网卡的一些rules和monitors会触发Windows Server 2003系统netman的一个bug。该bug将导致与netman相关的svchost.exe异常终止。下面列出一些可能触发问题的rules和monitors:

Rules:

-          Microsoft.Windows.Server.2003.NetworkAdapter.PercentBandwidthUsedReads.Collection (Percent Bandwidth Used Read)

-          Microsoft.Windows.Server.2003.NetworkAdapter.PercentBandwidthUsedWrites.Collection (Percent Bandwidth Used Write)

-          Microsoft.Windows.Server.2003.NetworkAdapter.PercentBandwidthUsedTotal.Collection (Percent Bandwidth Used Total)

Monitors:

-          Microsoft.Windows.Server.2003.NetworkAdapter.PercentBandwidthUsedReads (Percent Bandwidth Used Read)

-          Microsoft.Windows.Server.2003.NetworkAdapter.PercentBandwidthUsedWrites (Percent Bandwidth Used Write)

-          Microsoft.Windows.Server.2003.NetworkAdapter.PercentBandwidthUsedTotal (Percent Bandwidth Used Total)

在这种环境下我们需要根据以下blog中的步骤禁用这些rules和monitors:

https://blogs.technet.com/b/kevinholman/archive/2011/12/12/opsmgr-network-utilization-scripts-in-baseos-mp-version-6-0-6958-0-may-cause-high-cpu-utilization.aspx

 

4.       如果以上方法都无法解决问题,那么svchost.exe可能由一些其他的原因导致。这种情况下我们可以做以下尝试:

     4.1 如果一个svchost.exe实例包含了多个服务,那么某个服务出现异常会导致这个svchos.exe终止。这个实例中的其他程序都受到影响。为了减小受影响的范围,我们可以把这些服务独立出来,每个svchost.exe实例仅包含一个服务。例如把netman服务独立出来的命令如下:

     Sc config netman type= own

    注:执行这个步骤后建议重启计算机使设置生效。

    4.2 联系微软技术支持中心,我们的工程师会协助您排查这个问题。为了提高排查效率,您可以先行收集dump(内存转储)文件。一般dump文件可以比较明确的发现原因。步骤如下:

-. 从以下链接下载 userdump tool 工具: (https://www.microsoft.com/downloads/details.aspx?FamilyID=e089ca41-6a87-40c8-bf69-28ac08570b7e&DisplayLang=en).

-. 运行该工具后,该工具会解压到默认文件夹 c:\kktools\userdump8.1. 根据您系统架构在x86 或 x64下运行setup.exe.

-. 之后在Control Panel 中打开Process Dumper 进行配置.

-. 点击 New 输入 svchost.exe 作为 Application Name. 点击 OK保存设置.

-. 高亮svchost.exe ,点击 Rules。

a. 选择 user custom rules.

b. 选择一个 文件夹用来存放生成的dump文件.

c. 在Exception Codes中高亮 Access Violation。

d. 将 minidump type 设置为 Complete.

 

-. 点击OK保存设置.

Comments

  • Anonymous
    July 23, 2012
    It is veryhelpful to such kind of issue with Windows 2003, and the steps are clear enough to complete the test on our own. Thanks for the sharing!