Menu Close

Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

20.3.2. strace でのアプリケーションのシステム呼び出しの監視

strace ツールは、システムコール、シグナル配信、プロセス状態の変更など、アプリケーションと Linux カーネル間の対話 (および改ざん) のトレースを有効にします。

前提条件
  • strace がシステムにインストールされている

    • strace をインストールするには、root で以下のコマンドを実行します。

      # yum install strace
手順

strace の追跡仕様構文は、システムコールの特定に役立つ正規表現と syscall クラスを提供することに注意してください。

  1. 監視するプロセスを実行またはアタッチします。

    • 監視するプログラムが実行していない場合は、strace を起動して、プログラム を指定します。

      $ strace -fvttTyy -s 256 -e trace=call program

      上記の例で使用されるオプションは必須ではありません。必要な場合に使用します。

      • -f オプションは、「follow forks」の頭字語です。このオプションは、fork、vfork、および clone システムコールが作成した子を追跡します。
      • -v または -e abbrev=none オプションは、出力の省略を無効し、さまざまな構造フィールドを省略します。
      • -tt オプションは、各行を絶対タイムスタンプでプレフィックスする -t オプションのバリアントです。-tt オプションを指定すると、出力される時間にはマイクロ秒が含まれます。
      • -T オプションは、行末に各システムコールに費やした時間を出力します。
      • -yy オプションは、ファイル記述子番号に関連付けられたパスの出力を有効にする -y オプションのバリアントです。-yy オプションはパスだけでなく、ソケットファイル記述子に関連するプロトコル固有の情報、デバイスのファイル記述子に関連するブロックまたはキャラクターのデバイス番号も出力します。
      • -s オプションは、出力される文字列の最大サイズを制御します。ファイル名は文字列と見なされず、常にフル出力されることに注意してください。
      • -e trace は、トレースするシステムコールのセットを制御します。

        call を、表示するシステムコールのコンマ区切りリストに置き換えます。call を残すと、strace はすべてのシステムコールを表示します。一部のシステム呼び出しのグループについては、strace(1) man ページで提供されています。

    • プログラムがすでに実行中の場合は、プロセス ID (pid) を検索して、その id に strace を割り当てます。

      $ ps -C program
      (...)
      $ strace -fvttTyy -s 256 -e trace=call -ppid
    • フォークしたプロセスまたはスレッドを追跡しない場合には、-f オプションを使用しないでください。
  1. strace は、アプリケーションで作成したシステム呼び出しとその詳細を表示します。

    ほとんどの場合、システム呼び出しのフィルターが設定されていないと、アプリケーションとそのライブラリーは多数の呼び出しを行い、strace 出力がすぐに表示されます。

  2. strace は、トレースしたプロセスがすべて終了する際に終了します。追跡しているプログラムの終了前に監視を中断するには、Ctrl+C を押します。

    • strace がプログラムを起動すると、終了するシグナル (この場合は SIGINT) を起動しているプログラムに送信します。ただし、そのプログラムは、そのシグナルを無視する可能性があることに注意してください。
    • 実行中のプログラムに strace を割り当てると、そのプログラムは strace と共に中断します。
  3. アプリケーションが実行したシステム呼び出しの一覧を分析します。

    • リソースへのアクセスや可用性の問題は、エラーを返す呼び出しとしてログに表示されます。
    • システム呼び出しや呼び出しシーケンスのパターンに渡す値により、アプリケーションの動作の原因が分かります。
    • アプリケーションがクラッシュした場合に、重要な情報はおそらく、ログの最後に表示されます。
    • 出力には多くの追加情報が含まれています。ただし、より正確なフィルターを作成して、手順を繰り返すことができます。
備考
  • 出力を確認することにも、ファイルに保存することにも利点があります。これを行うには tee コマンドを実行します。

    $ strace ...-o |tee your_log_file.log>&2
  • 異なるプロセスに対応する個別の出力を表示するには、以下を実行します。

    $ strace ... -ff -o your_log_file

    プロセス ID (pid) のプロセスの出力は、_log_file.pid に保存されます。

関連資料