You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows容器运行PerfView遇COMException(0x80070296)问题求助

解决Windows容器中运行PerfView时的0x80070296 COM异常

异常详情

[Exception Occurred: System.Runtime.InteropServices.COMException (0x80070296): Exception from HRESULT: 0x80070296
   at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)
   at Microsoft.Diagnostics.Tracing.Extensions.ETWControl.EnableStackCaching(UInt64 traceHandle)
   at Microsoft.Diagnostics.Tracing.Session.TraceEventSession.EnableKernelProvider(Keywords flags, Keywords stackCapture)
   at PerfView.CommandProcessor.Start(CommandLineArgs parsedArgs)
   at PerfView.CommandProcessor.Collect(CommandLineArgs parsedArgs)
   at PerfView.CommandProcessor.ExecuteCommand(CommandLineArgs parsedArgs)]

操作步骤

  • 下载PerfView v3.0.6并复制到Windows容器内
  • 通过crictl exec <container id> powershell进入容器终端
  • 执行收集命令:
    .\PerfView "/DataFile:PerfViewData.etl" /BufferSizeMB:256 /StackCompression /CircularMB:500 /logFile=log.txt /maxCollectSec=30 /NoGui collect
    

环境信息

  • 基础镜像:mcr.microsoft.com/windows/nanoserver:1809
  • 隔离模式:runhcs-wcow-hypervisor(Hyper-V隔离)

解决方案

1. 切换至Server Core基础镜像

Nano Server为轻量化设计,裁剪了PerfView内核追踪依赖的ETW相关系统组件和服务,无法支持完整的PerfView功能。改用mcr.microsoft.com/windows/servercore:1809作为容器基础镜像,该镜像包含完整的系统服务和组件,能够兼容ETW追踪需求。

2. 以特权模式启动容器

PerfView需要访问内核级ETW接口,普通容器权限不足以完成操作。启动容器时添加特权模式参数(crictl对应--privileged=true),确保容器拥有足够权限访问系统追踪资源。

3. 调整PerfView命令参数

容器内资源受限,过大的缓冲区配置可能导致初始化失败,同时部分特性在容器环境中兼容性不佳:

  • 降低/BufferSizeMB值至64(或更小),减少内存占用
  • 暂时移除/StackCompression参数,避免兼容性问题
    修改后的命令:
.\PerfView "/DataFile:PerfViewData.etl" /BufferSizeMB:64 /CircularMB:500 /logFile=log.txt /maxCollectSec=30 /NoGui collect

4. 验证Hyper-V隔离配置

确认容器确实运行在Hyper-V隔离模式下,通过对应工具检查容器的隔离配置字段是否为hyperv,避免配置未实际生效导致的权限或资源限制问题。


内容的提问来源于stack exchange,提问作者SilverNarcissus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 03:05:29