Aug*_*rom 2 debian profiling configure evince
我运行 Debian 10,大约两周后,PDF 阅读器 Atril(Evince 的一个分支)需要 25 秒才能启动。以前它几乎立即开始。现在我试图找出导致延迟的原因。我已经下载了源包,并在启用分析的情况下构建并安装了它:
cd "$HOME/.local/src"
apt source atril
cd atril-1.20.3
./autogen.sh
./configure CFLAGS=-pg LDFLAGS=-pg --prefix="$HOME/.local" --disable-caja
make V=1
make install
Run Code Online (Sandbox Code Playgroud)
但是,当我启动时"$HOME/.local/bin/atril"没有gmon.out创建命名的文件。使用V=1make 命令中的详细模式,我可以看到该选项-pg已添加到编译和链接命令中。有什么线索吗?缺少了什么?互联网上有几个教程展示了如何分析简单的静态链接示例程序,但我们如何分析“真实世界”的应用程序?
编辑:原来 gmon.out 是在我的主目录中创建的。但是,当我通过 gprof 运行 Atril 时,结果输出并没有说太多,因为应用程序是多线程的。
我个人不会挖那么深。我建议不要构建自己的 atril,而是使用 debian atril(因为这是您之后将使用的,而且 debian 为您提供调试符号)。
按复杂程度排序:
top(甚至更好:htop,并在其设置中禁用“隐藏用户进程线程”)。进程是否使用了大量 CPU?前往perf或gdb。gdb 对于这样的事情通常已经足够了:
gdb atril提示:gdb 可能会告诉您缺少一些调试符号——您也可以安装这些符号,这样当它们当前不在 atril 中时,您可以更轻松地破译回溯)(gdb)外壳上,说runinfo threads会告诉你每个线程都被卡住了thread Nbt。你会看到你来自哪里。strace atril将告诉显示它所做的呼叫,实时。你最近接到的几个电话是什么?也许它试图睡觉?perflinux-base 包中的命令很棒:sudo sysctl -w kernel.perf_event_paranoid=-1,然后perf record -ag atril将定期采样执行卡住的地方(但它会查看所有进程,因此请关闭浏览器,在家折叠并whatnot),然后perf report -g从同一目录显示可浏览的统计信息。如果您安装了调试符号,这些会变得更有用。