代码之家  ›  专栏  ›  技术社区  ›  Kristopher Johnson

用“系统”进程诊断100%CPU使用率的原因

  •  4
  • Kristopher Johnson  · 技术社区  · 14 年前

    我怀疑I/O连接正在打开而从未关闭,因此操作系统将花费越来越多的时间来处理这些请求,但我想在尝试解决问题之前验证一下这一点。


    更新:玩过之后 xperf ,我发现系统进程在 ntoskrnl.exe!KxWaitForSpinLockAndAcquire . 我对此一无所知,但函数的名称告诉我可能存在死锁/争用问题。

    系统经常使用的其他功能包括 NETIO.SYS!FilterMatchEnum , NETIO.SYS!MatchConditionOverlap , NETIO.SYS!IsFilterVisible ,和 MpNWMon.sys!NetFlowUpendByCompletionHandle .

    5 回复  |  直到 14 年前
        1
  •  3
  •   dcp    14 年前

    sysinternals 工具,如果你还没有。

    Handle 工具,显示系统中打开的所有文件。

    另一个似乎直接适用于您的场景的是 ProcDump ,它允许您在给定进程的CPU使用率超过x%时转储进程信息。

        2
  •  2
  •   idij    14 年前

    对于您自己的流程:

    • 把手很重要等等,
    • 打开显示 连接。
    • 流程的下半部分 用于显示进程的资源管理器

    希望你能从中看到哪些资源被过度使用。

    Portmon也值得一试,看看活动是否如预期的那样。

        3
  •  1
  •   orip    14 年前

    我建议用系统内部的 Process Monitor Portmon ,它应该显示TCP连接和串行端口活动的状态。

        4
  •  1
  •   Mike    14 年前

    用户转储。在这种情况下获取进程的userdump。然后将转储加载到winDbg中,看看它在做什么。一个非常有用的命令是!逃亡的。这将告诉您哪些线程使用的CPU最多。然后看看这些线程,看看它们在做什么。

        5
  •  0
  •   Will Dean    14 年前

    推荐文章