straceコマンド入門: 基本的な使い方と活用例

—

by

in

straceとは

straceはLinux/Unix系OSで動作するデバッグ・トレースツールです。システムコールとシグナルの呼び出し履歴をリアルタイムで取得でき、プログラムの挙動や問題箇所の特定に役立ちます。

主な用途

  • プログラムがどのファイルを開いているか確認する
  • ネットワーク通信の詳細を取得する
  • エラーの原因となるシステムコールを特定する
  • パフォーマンスボトルネックの分析

基本的なオプション

  • -c:システムコールの統計情報を集計して表示
  • -e:トレース対象をフィルタリング(例: trace=open,close)
  • -p:既存プロセスにアタッチ
  • -o:出力をファイルに保存

実践例

1. 単純なコマンドのトレース

strace ls -l /tmp

上記はlsが実行するすべてのシステムコールを標準エラーに出力します。

2. システムコールを絞って表示

strace -e trace=open,read,write cat /etc/passwd

open、read、write のみを表示し、ノイズを減らします。

3. プロセスにアタッチして監視

# 例: PID 1234 のプロセスをトレース
strace -p 1234 -e trace=network

ネットワーク関連のシステムコールだけをリアルタイムで取得できます。

4. 統計情報でパフォーマンス分析

strace -c ./my_program

実行終了後に、システムコールごとの呼び出し回数と合計時間が表形式で出力され、ボトルネックが一目で分かります。

よくある落とし穴と対策

  • 出力が膨大になる:-eで必要なシステムコールだけに絞る。
  • 権限不足でアタッチできない:root または対象プロセスと同じユーザーで実行する。
  • 一部のシステムコールはカーネルバージョン依存:環境に合わせてオプションを調整する。

まとめ

straceはシステムコールレベルの情報を提供する強力なツールです。基本オプションを覚えておくだけで、ファイルアクセスやネットワーク通信、エラー原因の特定が格段に楽になります。実務でのトラブルシューティングやパフォーマンスチューニングにぜひ活用してください。