2009-06-19
■[Unix] 実行中のアプリケーションを外から観察するコマンド。
![実行中のアプリケーションを外から観察するコマンド。のブックマークコメント 実行中のアプリケーションを外から観察するコマンド。のブックマークコメント](http://megalodon.jp/get_contents/63394873)
- strace
- システムコールをトレース。カーネルと何を話しているか。
- strace -p PID でプロセスにアタッチ。実行中のプロセスをトレース。
- straceを使ったデバッグ - SourceForge.JP Magazine : オープンソースの話題満載
- Linuxカーネルの作り出す世界 − @IT自分戦略研究所
- ふつうのLinuxプログラミング 青木峰郎
- システムコールとライブラリ関数 − @IT自分戦略研究所
- システムコール・ライブラリルーチン
- UNIX の部屋
- ltrace
- 共有ライブラリの呼び出しをトレース。*.soと何を話しているか。
- ltrace -p PID でプロセスにアタッチ。実行中のプロセスをトレース。
- ltrace で共有ライブラリの関数呼び出しをトレースする - bkブログ
- 500 Internal Server Error
- Linux JF
- ライブラリの基礎知識
- DTrace
- Macで使える。Linuxには無い。低負荷。運用中の本番環境で使える。スクリプト言語付き。
- dtrace を使ったシステムコールのトレース - IT戦記
- OS選択の新常識:カーネル挙動を追尾する「DTrace」の実力 (1/8) - ITmedia エンタープライズ
- @IT:DTraceでトラブルシューティング(1/4)
- ヽ( ・∀・)ノくまくまー(2008-03-19)
Rubyで使えるプローブの一覧
- ヽ( ・∀・)ノくまくまー(2008-06-20)
Linuxに移植する人がいない。
- 404 Not Found
- Error Page 404
- 開発者ブライアン・キャントリルのインタビュー
- 「DTraceの素晴らしさは、システムに潜在する難問を解決することだけではなく、様々な制約がある業務中の本番環境で問題解決を実現できることだ。」
- systemtap
- Linux用。DTraceと比べるとイマイチらしい。DTrace Knockoffs (Adam Leventhal’s Weblog) "like systemtap, but not crap"
- lsof
- LiSt Open Files。どのファイルを使っているか調べられる。
- 404 Not Found
- lsof -p PID
- lsof -c ruby
- lsof -u koseki
- lsof /var/log/apache2/access_log このファイルを開いているのはどのプロセスか。
- lsof /dev/sda1 このデバイスを開いているのはどのプロセスか。
- lsof -i ネットワーク接続一覧
- lsof -Pni ネットワーク接続一覧の速いバージョン。
- lsof -i @example.com ホスト
- lsof -i :80 ポート
- lsof -i :2000-3000 ポートの範囲
- lsof -i @example.com:80 ホスト+ポート
- lsof -d24 ファイルデスクリプタの番号
- gdb
- tracef / hogetrace
- 関数呼び出しをトレースする。Linuxのみ。
- fileコマンドでstrippedと出なければ解析可能。-gオプション付きだと表示が増える。
- tracef -p PIDでプロセスにアタッチ。
- tracef - function call tracer
類似ツールの一覧も。
- hogetrace - 関数コールトレーサ - memologue
- ftrace
- 関数呼び出しをトレースする。-finstrument-functions と -g オプションを付けてコンパイルする必要がある。
- DSAS開発者の部屋:オープンソースを楽しむエンジニアの二日目 - ftraceコマンドを書く
- DSAS開発者の部屋:オープンソースを楽しむエンジニアの一日 〜 コードを楽しく読む工夫
- Windows
- その他
- ソースコードを読むための技術
strace(Linux), ktrace(BSD), truss(Solaris)
- 普通のやつらの下を行け: ptrace で実行中のプロセスにちょっかいを出す - bkブログ
ptrace
- ソースコードを読むための技術
使っている共有ライブラリを調べる。
lddでアプリケーションや共有ライブラリが依存している共有ライブラリを調べられる。
$ ldd /usr/bin/ruby linux-gate.so.1 => (0x008bc000) libruby1.8.so.1.8 => /usr/lib/libruby1.8.so.1.8 (0x008f7000) libpthread.so.0 => /lib/i686/nosegneg/libpthread.so.0 (0x00a7d000)
Mac OSXにlddは無い。代わりにotoolを使う。
$ otool -L /opt/local/bin/ruby /opt/local/bin/ruby: /opt/local/lib/libruby.dylib (compatibility version 1.8.0, current version 1.8.6) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.3) /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0) /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
- ldd 実行ファイル|共有ライブラリ(*.so)
- otool -L 実行ファイル|共有ライブラリ(*.dylib)
- *.soはELF形式
- *.dylibはMach-O(マーク・オー)形式
- バイナリ形式はfileコマンドで調べられる。
- file /usr/local/bin/ruby1.8
Ruby
スレッドダンプが見たい。
スレッドが止まってる気がする時とか。
xray。Javaと同様に、kill -QUITでスレッドダンプが見える。
gem install xray
- caller_for_all_threads 全スレッドのダンプを取るための拡張。Rubyのビルドが必要。もうちょっと調べる。
適当なタイミングでトレースしたい。
5秒ごとに0.5秒トレースをオンにする。
#! /usr/bin/env ruby require "tracer" Thread.start do loop do sleep 5 Tracer.on sleep 0.5 Tracer.off end end a = 0 loop do a = a + 1 end
シグナルを送ってトレースをオン・オフ。
(書く予定)
プロセスと仲良くなる。
htopを入れたら、急にプロセスが身近に思えるようになりました。htopサイコー。
- htop - an interactive process-viewer for Linux
- 矢印キーで上下左右にスクロール。
- /でインクリメンタル検索。
- tでツリー表示。
- P/M/Tでソート。Iで反転。>でメニューからソート選択。
- kでメニューから送りたいシグナルを選べる。
- スペースキーでマークしてkでまとめてkill。
- Sで設定。
- Highlight program "basename" →オン
- Display threads in a different color →オン
- sでstrace表示。
あとはEC2で素のdebianを触るようになったのが結構良かった。はじめから動いてるプロセスが超少ないので、全体を把握した気持ちになれる。
書籍
Binary HacksとDebug Hacksがいいみたい。今なら読めるかも……!
コメント
koseki
2009/06/23 19:23
更新: Windows版へのリンクを足しました。
トラックバック - http://d.hatena.ne.jp/koseki2/20090619/TraceProc
リンク元
- 648 http://b.hatena.ne.jp/
- 529 http://b.hatena.ne.jp/hotentry
- 344 http://d.hatena.ne.jp/
- 231 http://reader.livedoor.com/reader/
- 204 http://b.hatena.ne.jp/hotentry/it
- 136 http://www.sleipnirstart.com/
- 96 http://www.google.co.jp/reader/view/
- 82 http://www.google.com/reader/view/
- 80 http://news.atode.cc/
- 65 http://www.mixclips.org/