我目前正在使用黑名单https://github.com/StevenBlack/hosts,拥有 50,000 多个域名。但是,我发现我的 DNS 客户端 CPU 使用率异常高。
较大的 hosts 文件是否会导致 CPU 使用率过高?
如果是这样,除了浏览器插件之外,还有哪些其他方法可以使用 hosts 文件将整个系统中的某些域列入黑名单?
编辑:Windows 10
答案1
可以通过 regedit 从 NetworkService REG_MULTI_SZ 中删除“DNSCache”条目成功解决此问题:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchost
HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\Svchost
在此之前,当我使用 Steven Black 的 hosts 文件时,我必须等待约 10 分钟才能让 SVCHOST DNS 客户端完成其进程。进行此更改后,我不再需要等待。尽情享受吧……
答案2
禁用 DNS 客户端服务不是一个好主意,因为许多软件(如 WireGuard 和 Hyper-V Default Switch)都依赖它。另一种方法是限制其 CPU 使用率并设置其优先级。
这是一个 PowerShell 脚本,它使 DNS 缓存服务仅在 CPU3 上运行并具有最低进程优先级。
#Requires -RunAsAdministrator
$svcPid = Get-WMIObject Win32_service | where Started -eq "True" | where Name -eq "DnsCache" | select ProcessId
$process = Get-Process -Id $svcPid.ProcessId
$process.ProcessorAffinity = 8
$process.PriorityClass="Idle"
其中 8 是 CPU ID 的位掩码(文件在此)。
您可以在每次系统启动时执行该脚本。
powershell.exe -NonInteractive -NoLogo -NoProfile -File "C:\...\LimitDnsCacheCpuUsage.ps1"
注意:此方法需要服务主机分组已被禁用。幸运的是,在 RAM 超过 3.5GB 的机器上,服务主机分组默认被禁用。
答案3
禁用(停止)DNS客户端,在Windows中您不需要它
您可能还会遇到大型主机的 CPU 占用过高的情况,并且禁用了 DNS 服务,这是由 explorer.exe 引起的(可能与某些防病毒软件有关)