Visual Studio 2022 CPU分析器ETW资源耗尽问题求助
解决VS CPU Profiler报ETW资源耗尽问题的方案及分析
排查ETW日志器占用情况(用xperf)
- 打开管理员命令提示符,执行以下命令列出所有活跃的ETW日志器:
输出会包含每个日志器的名称、所属进程PID、运行状态。重点关注xperf -loggersRunning状态的条目,找出除Sysmon外的其他占用进程。 - 根据PID定位进程:
或者直接在任务管理器中查找对应PID的进程。tasklist /fi "PID eq <目标PID>" - 停止残留的ETW会话:如果发现异常残留的会话(比如VS诊断工具崩溃后未关闭的
VsPerf会话),用以下命令停止:xperf -stop <日志器名称>
针对性修复步骤
- 确认EtwMaxLoggers注册表设置生效:修改
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI下的EtwMaxLoggersDWORD值后,必须重启系统才能生效,仅重启VS无效。 - 临时关闭Sysmon测试:执行命令停止Sysmon服务:
(如果是32位版本用net stop Sysmon64net stop Sysmon),再尝试启动VS的CPU分析工具。如果恢复正常,说明Sysmon的ETW会话加上其他进程的会话已达上限,可考虑精简Sysmon的事件收集配置,或者保持EtwMaxLoggers设置为256。 - 清理VS缓存:删除VS组件缓存目录:
重启VS后再测试诊断工具。%LOCALAPPDATA%\Microsoft\VisualStudio\<你的VS版本号>\ComponentModelCache - 简化VS诊断配置:在VS诊断工具面板中,只启用「CPU Usage」,禁用其他不必要的诊断项(如内存、事件跟踪),减少ETW会话占用。
原因分析
- ETW日志器是系统级资源,每个活跃的ETW会话(包括Sysmon、VS Profiler、系统诊断服务等)都会占用一个日志器实例,当数量达到
EtwMaxLoggers上限时就会触发报错。 - 即使只运行Sysmon,后台可能存在Windows自带的诊断服务、第三方监控工具,或是VS异常退出后残留的ETW会话,这些都会占用资源,重启VS无法清理系统级的残留会话。
- 若修改注册表后仍未解决,大概率是未重启系统让设置生效,或是仍有隐藏进程在占用ETW资源。
内容的提问来源于stack exchange,提问作者John Stritenberger
相关产品推荐
相关产品推荐

