使用heap_stat(基于PYKD库的Python脚本,用于在Windbg环境中运行Python脚本)时,我为该脚本完成工作所需的大量时间感到沮丧。
因此,我已经开始使用“ Very Sleepy”进行性能分析,结果如下:
Name Exclusive Inclusive % Excl. %Incl. Module
RtlValidSecurityDescriptor 2561.56s 5123.12s 50.00% 100.00% ntdll
ZwWaitForSingleObject 1280.78s 1280.78s 25.00% 25.00% ntdll
NtUserWaitMessage 1279.73s 1279.73s 24.98% 24.98% win32u
如您所见,大多数时间都花在一个函数上,检查一些有效性(我认为不需要)。有没有办法禁用此检查(Windows配置,注册表设置等)?
在发表第一条评论后进行编辑
请求进行xperf
分析后,我执行了以下xperf
命令:
开始分析:
xperf -start "DDS_LoggerName" -StackWalk ObjectCreate+ObjectDelete+ObjectReference -heap -Pids 28068
停止分析:
xperf -stop "DDS_LoggerName"
我已经使用Windows Performance Analyzer
打开了结果(不完整,因为我首先想看看结果是什么样的),但这对我来说没有意义。我相信我的xperf
配置错误。我该如何启动xperf
分析,以便能够测量哪个功能花费了多少时间?
答案 0 :(得分:1)
我在这里看到了xperf日志和结果:
25%的CPU接到电话 heap_output = dbgCommand('!heap -h 0')。split('\ n')
75%循环 对于heap_output中的heap_block: 而主要的CPU使用者是pykd.ptrPtr
CPU丢失的主要原因是调试引擎在内部大量调用dbgeng!FlushCallbacks。实际上,所有的调试引擎功能都回想起这种方法,我不明白为什么。
我建议您重构一下heap_stat.py并使用ptrDword或ptrQword重写您自己的ptrPtr函数,这可能会减少CPU损失。