自从 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 帐户下。微软进一步拆分进程是有原因滴,为什么呢?
增加稳定性,一个服务崩溃,只会拖垮一个 svchost.exe,在以前,一个运行在与系统核心服务相同的 svchost.exe 的服务崩溃并拖垮 svchost.exe 后,系统就必须重新开机哦。
增加透明度,你可以轻松地通过任务管理器查看每个服务消耗的 CPU、内存以及其它资源,只要查询进程或者详细信息标签即可达成目标。
减少服务开销,如果电脑有问题,不想重装系统,找来了系统管理员或者微软的工程师,他们不必剖析每个
svchost.exe
从而找出引起问题的服务,相反,迅速定位问题成为可能,因为不必分析每个svchost.exe
,只要找到有问题的svchost.exe
进程即可定位到引起问题的服务,并加以修理。增加安全性,还记得 WannaCry 事件吗?每个服务运行在单独的进程,就有机会让 Server 服务运行在非特权用户(System 用户)了,当然,这是一个例子,不过你完全可以举一反三,让系统服务运行在单独的进程,对于提高安全性确实是个好主意。
当然了,这也有一些坏处,进程数太多看着不爽是次要的,主要是进程太多,对于系统也是一种负担,系统资源的开销也会更大,好消息是现在的电脑基本上都能负担得起。
如果确实想要改成经典服务管理模型,或者想要改成当物理内存大于特定数值时启用新的服务管理模型,可以通过修改注册表达成,方法如下:
打开注册表编辑器,右键点击开始按钮,然后点击运行;
输入
regedit
然后点击确定;在用户帐户控制对话框,点击是按钮,或者输入管理员用户名及密码;
导航到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
,在右侧列表,开启SvcHostSplitThresholdInKB
;选取十进制单选按钮,在“数值”框内,输入下列任意一组数字,预设值是:
点击确定,关闭注册表编辑器并重新启动电脑;
1048576(1 GB);
1835008(1.75 GB);
3670016(3.5 GB):
7864320(7.5 GB);
12058624(11.5 GB);
16252928(15.5 GB);
24641536(23.5 GB);
0(停用);
参考来源,在撰写本文时,Johnny 参考了如下 1 个来源:
https://winaero.com/blog/why-many-svchost-exe-are-running-in-windows-10-creators-update/