当线程阻塞等待事件时,SysInternals 的 Process Monitor 可以记录吗?
Can SysInternals' Process Monitor log when a thread blocks awaiting for an event?
我需要诊断无法达到最佳性能的服务器。 CPU 使用率下降到零大约 500 毫秒,然后在尝试处理排队的请求时飙升到 100%,这种模式在几个小时内重复,之后操作再次变得平稳(操作已经平稳多年)
这向我表明工作线程在等待外部事件发生时处于空闲状态。该应用程序很复杂,我们无法查明罪魁祸首。
Process Monitor 是否可以配置为在线程每次休眠等待某个事件时进行记录?
如果可能,该事件是否可以与特定堆栈跟踪相关?
如果上述情况可行,也许我可以将 CPU 下降与等待事件相关联并查明罪魁祸首。
我之前已经成功地使用 Windbg 来诊断这些类型的问题,但是在这种情况下,等待时间非常短,我不确定我能否在处理器空闲时让调试器恰好中断。
Windbg 和 ProcMon 不是这项工作的正确工具。在您的开发者设备上安装 Windows Performance Toolkit,它是 Windows 10 SDK 的一部分。
现在 xcopy 文件夹 C:\Program Files (x86)\Windows Kits\Windows Performance Toolkit
到服务器,以管理员身份打开 cmd.exe
和 运行 wpr.exe -start CPU && timeout -1 && wpr.exe -stop C:\Hang.etl
,现在最小化命令。
挂起后,切换回 cmd 并按任意键停止记录。
将 Hang.etl + NGENPDB 文件夹移动到开发 PC,使用 Windows 性能分析器 打开 Hang.etl
(WPA.exe
),通过将 CPU(精确)添加到分析窗格
来加载 debug symbols and start finding the hang
你会看到列 NewProcess、NewThreadId、NewStack、ReadyingProcess、ReadyingThreadId、ReadyingStack、Waits(us)。单击 Waits(us)
可在顶部查看最长的内容。现在寻找长时间,使用小计数(如此小的操作需要很长时间,操作不多)并检查调用堆栈以了解发生了什么。
我需要诊断无法达到最佳性能的服务器。 CPU 使用率下降到零大约 500 毫秒,然后在尝试处理排队的请求时飙升到 100%,这种模式在几个小时内重复,之后操作再次变得平稳(操作已经平稳多年)
这向我表明工作线程在等待外部事件发生时处于空闲状态。该应用程序很复杂,我们无法查明罪魁祸首。
Process Monitor 是否可以配置为在线程每次休眠等待某个事件时进行记录? 如果可能,该事件是否可以与特定堆栈跟踪相关?
如果上述情况可行,也许我可以将 CPU 下降与等待事件相关联并查明罪魁祸首。
我之前已经成功地使用 Windbg 来诊断这些类型的问题,但是在这种情况下,等待时间非常短,我不确定我能否在处理器空闲时让调试器恰好中断。
Windbg 和 ProcMon 不是这项工作的正确工具。在您的开发者设备上安装 Windows Performance Toolkit,它是 Windows 10 SDK 的一部分。
现在 xcopy 文件夹 C:\Program Files (x86)\Windows Kits\Windows Performance Toolkit
到服务器,以管理员身份打开 cmd.exe
和 运行 wpr.exe -start CPU && timeout -1 && wpr.exe -stop C:\Hang.etl
,现在最小化命令。
挂起后,切换回 cmd 并按任意键停止记录。
将 Hang.etl + NGENPDB 文件夹移动到开发 PC,使用 Windows 性能分析器 打开 Hang.etl
(WPA.exe
),通过将 CPU(精确)添加到分析窗格
你会看到列 NewProcess、NewThreadId、NewStack、ReadyingProcess、ReadyingThreadId、ReadyingStack、Waits(us)。单击 Waits(us)
可在顶部查看最长的内容。现在寻找长时间,使用小计数(如此小的操作需要很长时间,操作不多)并检查调用堆栈以了解发生了什么。