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