Debian

如何分析真實世界的應用程序?

  • June 12, 2021

我執行 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

但是,當我啟動時,"$HOME/.local/bin/atril"沒有創建名為gmon.out的文件。在 make 命令中使用詳細模式V=1,我可以看到該選項-pg已添加到編譯和連結命令中。有什麼線索嗎?少了什麼東西?網際網路上有幾個教程展示瞭如何分析簡單的靜態連結範常式序,但我們如何分析“現實世界”應用程序?

**編輯:**原來 gmon.out 是在我的主目錄中創建的。但是,當我通過 gprof 執行 Atril 時,由於應用程序是多執行緒的,因此結果輸出並沒有說太多。

我個人不會挖那麼深。我建議不要建構您自己的 atril,而是使用 debian atril(因為這是您之後將使用的,而且 debian 會為您提供調試符號)。

按複雜度排序:

  • 在啟動 atril 時執行top(甚至更好: ,並在其設置中禁用“隱藏使用者態程序執行緒”)。htop程序是否佔用大量 CPU?轉到perfgdb

  • gdb對於這樣的事情通常足夠好:

    1. 安裝 atril 的調試符號,參見debian wiki
    2. 啟動 gdb,載入 atril:(gdb atril提示:gdb 可能會告訴您缺少一些調試符號 - 您也可以安裝這些符號,因此當它們目前不在 atril 中時,您可以更輕鬆地破譯回溯)
    3. (gdb)外殼上,說run
    4. 在無聊的 15 秒內,按ctrl+ c。這會中斷 gdb 中的執行
    5. 因為 atril 可能是多執行緒的,所以info threads會告訴你每個執行緒都被卡住了
    6. 按編號 N 選擇最有趣的執行緒,輸入thread N
    7. 得到一個回溯:bt。你會看到你來自哪裡。
  • 如果它不使用 CPU 本身,它幾乎肯定是在等待系統呼叫完成。strace atril會告訴顯示它所做的呼叫,現場直播。你接到的最後幾個電話是什麼?也許它試圖睡覺?

  • 如果您受 CPU 限制,並且通常,perf來自 linux-base 軟體包的命令很棒:sudo sysctl -w kernel.perf_event_paranoid=-1,然後perf record -ag atril會定期採樣執行卡住的位置(但它會查看所有程序,因此請關閉瀏覽器,在家折疊並whatnot),然後,perf report -g從同一目錄顯示可瀏覽的統計資訊。如果您安裝了調試符號,這些會變得更加有用。

引用自:https://unix.stackexchange.com/questions/653960