在使用状态 (一个基于PYKD库的Python脚本,用于在Windbg环境中运行Python )时,我对这个脚本完成其工作所需的大量时间感到沮丧。
因此,我使用"非常昏昏欲睡“启动了一个分析会话,结果如下:
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分析才能度量哪个函数花费了多少时间?
发布于 2019-01-09 13:33:24
我看到了您的xperf日志,这里是您的结果:
25%的CPU调用heap_output =dbgCommand(‘!堆-h 0').split('\n')
heap_block在heap_output中75%的循环:并且主要的CPU使用者是pykd.ptrPtr
CPU丢失的主要原因是调试引擎在内部大量调用dbgeng!FlushCallbacks。事实上,所有的调试引擎功能都记得这个方法,我不明白为什么。
我可以建议您使用重构的heap_stat.py并用ptrDword或ptrQword重写您自己的ptrPtr功能,这样可以减少CPU的损失。
https://stackoverflow.com/questions/54077490
复制相似问题