以下是在安装了 64 GB 内存的 Windows 11 系统上进行进程群集前后的示例。空闲时,进程数从224 个减少到126 个。减少了近 100 个进程。


过去,Windows 会将许多系统服务组合到一个 svchost.exe 进程中。不过,从 Windows 10(1703 版)开始,微软改变了这一做法:如果电脑的内存超过 3.5 GB,Windows 就会将每个服务拆分为自己独立的进程。这完全是根据启动时检测到的内存量决定的。
为什么要把进程分开呢?主要是因为将它们隔离开来,如果其中一项服务出现故障,整个组就不会瘫痪。这也是一个可见性问题。在任务管理器中更容易看到具体是哪个服务在消耗 CPU(无需在组内进行调查)。这是一个安全问题,因为进程之间的隔离可以避免连锁错误。
但我们可以通过设置一个人为的高阈值来欺骗 Windows。Windows 认为它没有足够的 RAM 来 "浪费",因此被迫将服务打包到更少的容器中,从而大幅减少进程总数。
对进程进行群集的好处有很多,比如可以 减少处理器的开销。每个独立进程都需要 CPU 管理自己的线程、优先级和内存访问。将它们分组后,处理器的管理工作量就会减少。
没有了数百行相同的内容,监控任务管理器就容易多了,而且我们还能节省剩余内存,因为每个打开的进程都会消耗少量内存(其自身的支持结构)。将它们组合在一起可以减少几 MB 的隐性消耗。
唯一可能的负面影响 就是上文提到的。如果集群系统中的某个服务出现故障,就会拖累共享同一容器的其他服务,导致同时重启多个功能。如果它们是独立的,则只有该特定服务发生故障,而不会影响其他服务。独立的进程会使一个服务的安全故障更难影响到系统的其他组件。如果遇到意外错误,可以随时恢复群集。
这并不是什么黑客攻击或新的神奇技巧。在微软面向开发人员和系统管理员的Microsoft Learn 技术门户网站上,我们可以找到微软关于这种行为的官方文档。
如果您想试试,这里有一张表格,根据您的 RAM 列出了一些等效值。应用时,只需以管理员身份打开 CMD 或 PowerShell,运行命令并重新启动即可。
SvcHostSplitThresholdInKB寄存器设置内存 "阈值"。如果电脑的 RAM 超过命令中设置的值,Windows 将拆分进程。如果内存较少,则会将它们组合在一起。这就是为什么在下表中,我们给出的命令值总是高于当前内存;这样我们就能诱使 Windows 将服务批量分组。
(如果表格中没有您的内存容量,只需计算当前内存的两倍(GB)并应用公式即可:GB 数量 x 1024 x 1024)。
| 您当前的内存 | 应用命令(对流程进行分组) |
|---|---|
| 64 GB | reg add "HKLM\SYSTEM\CurrentControlSet\Control" /v SvcHostSplitThresholdInKB /t REG_DWORD /d 134217728 /f(适用 128GB 门槛) |
| 32 GB | reg add "HKLM\SYSTEM\CurrentControlSet\Control" /v SvcHostSplitThresholdInKB /t REG_DWORD /d 67108864 /f(适用 64GB 门槛) |
| 16 GB | reg add "HKLM\SYSTEM\CurrentControlSet\Control" /v SvcHostSplitThresholdInKB /t REG_DWORD /d 33554432 /f(32GB阈值适用) |
| 8 GB | reg add "HKLM\SYSTEM\CurrentControlSet\Control" /v SvcHostSplitThresholdInKB /t REG_DWORD /d 16777216 /f(16GB阈值适用) |
| 4 GB | reg add "HKLM\SYSTEM\CurrentControlSet\Control" /v SvcHostSplitThresholdInKB /t REG_DWORD /d 8388608 /f(8GB阈值适用) |
要将这些更改恢复到出厂状态,只需使用另一条命令并重新启动即可。
reg delete "HKLM\SYSTEM\CurrentControlSet\Control" /v SvcHostSplitThresholdInKB /f





