実際のアプリケーションを分析する方法は?

実際のアプリケーションを分析する方法は?

私はDebian 10を実行しており、約2週間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.outmakeコマンドのverboseモードでは、コンパイルおよびリンクコマンドにV=1このオプションが追加されていることを確認できます。-pgどんな手がかりがありますか?何が欠けていますか?単純な静的にリンクされたサンプルプログラムを分析する方法を示すインターネットチュートリアルがありますが、「実際の」アプリケーションをどのように分析しますか?

編集する:gmon.outが私のホームディレクトリに作成されたことがわかりました。しかし、gprofを介してAtrilを実行すると、アプリケーションはマルチスレッドであるため、出力に多くのコンテンツが表示されません。

答え1

私は個人的にそれほど深く掘り下げません。おすすめしたいいいえ独自のatrilを構築しますが、debian atrilを使用してください(これは後で使用され、debianはデバッグシンボルを提供するためです)。

複雑さに基づいてソート:

  • atrilが起動すると実行されますtop(またはより良い方法:htop設定で「ユーザー領域プロセススレッドを隠す」を無効にします)。プロセスはCPUを大量に使用しますか?perfまたはに移動しますgdb
  • 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にバインドされている場合、通常はperflinux-baseパッケージのコマンドが優れています。sudo sysctl -w kernel.perf_event_paranoid=-1その後perf record -ag atril、実行が中断される場所を定期的にサンプリングします(ただし、すべてのプロセスを見て、ブラウザを閉じて自宅で折りたたむなど)。 )、それはperf report -g同じディレクトリで参照できる統計を表示します。デバッグシンボルがインストールされていると、より便利になります。

関連情報