自从 Johnny 安装了 Windows 10 Build 1709 以后,就发现,刚开机时,进程数量就达到了 120 个以上,如果继续安装驱动程序和其它软件,进程数可以轻松达到 150 以上,这是什么原因呢?能不能解决?

Johnny 查看了一下任务管理器,发现svchost.exe这个名称的进程有几十个,难道是中病毒吗?仔细查看每个svchost.exe的路径,都是指向 %systemroot%\system32\svchost.exe,Windows Defender 扫描后并未发现问题,这究竟是怎么回事呢?

从 Build 14942 开始,Windows 10 Creators Update 启用了一种新的服务管理模型,在该模型下,每个服务会运行在单独的svchost.exe进程,例外是,电脑的内存小于 3.5 GB,当然啦,Johnny 跟大多数同学的电脑,运行内存都早已超过 4 GB 啦!微软拆分多个svchost.exe的历史源远流长,从早期的 Windows NT 4.0 开始,微软一直都是这么干的,原因吗,当然是为了系统的安全性和稳定性啦,您没看到吗?有的svchost.exe是运行在LOCAL SERVICE帐户,有的svchost.exe运行在NETWORK SERVICE帐户,而有的却运行在 SYSTEM 帐户下。微软进一步拆分进程是有原因滴,为什么呢?

  1. 增加稳定性,一个服务崩溃,只会拖垮一个svchost.exe,在以前,一个运行在与系统核心服务相同的svchost.exe的服务崩溃并拖垮svchost.exe后,系统就必须重新开机哦。
  2. 增加透明度,你可以轻松地通过任务管理器查看每个服务消耗的 CPU、内存以及其它资源,只要查询进程或者详细信息标签即可达成目标。
  3. 减少服务开销,如果电脑有问题,不想重装系统,找来了系统管理员或者微软的工程师,他们不必剖析每个svchost.exe从而找出引起问题的服务,相反,迅速定位问题成为可能,因为不必分析每个svchost.exe,只要找到有问题的 svchost.exe 进程即可定位到引起问题的服务,并加以修理。
  4. 增加安全性,还记得 WannaCry 事件吗?每个服务运行在单独的进程,就有机会让 Server 服务运行在非特权用户(System 用户)了,当然,这是一个例子,不过你完全可以举一反三,让系统服务运行在单独的进程,对于提高安全性确实是个好主意。

当然了,这也有一些坏处,进程数太多看着不爽是次要的,主要是进程太多,对于系统也是一种负担,系统资源的开销也会更大,好消息是现在的电脑基本上都能负担得起。

如果确实想要改成经典服务管理模型,或者想要改成当物理内存大于特定数值时启用新的服务管理模型,可以通过修改注册表达成,方法如下:

  1. 打开注册表编辑器,右键点击开始按钮,然后点击运行;
  2. 输入regedit然后点击确定;
  3. 在用户帐户控制对话框,点击是按钮,或者输入管理员用户名及密码;
  4. 导航到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control,在右侧列表,开启 SvcHostSplitThresholdInKB
  5. 选取十进制单选按钮,在“数值”框内,输入下列任意一组数字,预设值是
3670016(3.5 GB):
1048576,1 GB;
1835008(1.75 GB);
7864320(7.5 GB);
12058624(11.5 GB);
16252928(15.5 GB);
24641536(23.5 GB);
0(停用);
  1. 点击确定,关闭注册表编辑器并重新启动电脑;