WPA分析卡顿

这周一个同事电脑上出现了程序卡顿的情况,我去他电脑上看了一下现场。启动后做拖动窗口等操作,有一定概率发生卡顿。过一会又恢复正常。然后通过WPR工具抓到的性能监控数据文件,用WPA分析了一下。分析出当时系统确实很繁忙,CPU有几段时间几乎100%跑满了。因此我认为这不是死锁导致的卡顿,是CPU占用高导致的。如下图所示:

然而另外一个同事他得出了不同的结论,他认为程序卡顿直接原因并不是由于系统CPU 100%导致程序UI无法响应的,是另外一处代码WaitForSingleObject阻塞了IO线程。然后他还提醒我,程序发生UI Delays的时候,系统的CPU那时候正处于很低的水平。
确实如他所说,程序卡顿并不是由于CPU跑满了而导致的。然后我向他请教,如何定位这种卡顿问题。写篇博客记录一下分析过程。

选中UI Delays中要分析的那段,一般都是最长的那段UI Delays,并右键选中Highlight Selection,以方便后续分析。
然后展开CPU Usage(Precise)图标,过滤你所需要分析的进程。如下图所示:

我们按照Waits Max排序,展开Ready Thread Stack,高亮的浅绿色就是发生UI Delays时间段的程序执行栈,然后一步步展开,到了最下面,看到net::URLRequest::StartJob运行的时间正好是我们UI Delays发生的时间段。查看相关代码果然是发起网络请求的时候WaitEvent阻塞了IO线程5秒,直到下载完成。

《WPA分析卡顿》有1个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注