TOP(サイトマップ)

Solarisトレースコマンド

(はじめに)
はじめに
Solarisって・・・
SunのセミナーとSDC
Solaris 10概要
資格(SCSA,SCNA)
Solarisフォーラム
管理人に連絡

(Solaris基本)

Solarisのインストール
システムの起動と停止
ファイルシステム
オートマウントとマウント
パッケージとパッチ
ユーザの追加と削除
ファイル権限(セキュリティ)
バックアップとリストア
CDE環境
プロセス管理/監視

(ネットワーク管理)

OSIを理解してみる
TCP/IPの設定
(TCP/IP入門)
DNSの設定
NISの設定
NFSの設定(WebNFS,CacheFS)
(NIS、NIS+、DNS違い)
DHCPの設定
1つのNICで複数IP設定

(IO関連)

インタフェース概要
SAFの管理
プリンタ管理概要
プリンタコマンド
SunSolve Online
SCSI情報(KEY,ASC,ASCQ)

(ソフトウェア関連)

Bash
Apache
Solstice DiskSuite
(SDS OSミラー回復)
Veritas VxVM

(OBPについて)

PROM(OBP)の概要
OBPでのキーボード操作
一般的なOBPコマンド
SolarisでOBPの設定
OBPに関するFAQ


(トラブル時の対応)

基本情報
エラーメッセージ
(主要メッセージ一覧)
性能関連コマンド
トレースコマンド
クラッシュダンプ
SunSolve Online

(その他)

小技集
UNIXコマンド
(manマニュアル)
システムチューニング
ネットワークチューニング
UltraSPARC T1について

(FAQ)

rootのPASSが不明
ハングアップかな?
ハードトラブル
OSが起動しない(b)
swap領域の拡張方法

(リンク)

Sun関連リンク
その他リンク
アバウトなJava入門
Perlメモ(逆引き用)

(1)apptrace(Solaris8以降)

Solaris 共有ライブラリの呼び出しを追跡することによって、アプリケーションやシステムの問題をデバッグできます。この追跡では、障害の発生場所に至るまでの一連のイベントを表示できます。


(2)snoop

snoopコマンドはTCP/IPのパケットの情報を採取するコマンドで、スーパーユーザーのみ実行できる。コマンドの形式は
snoop -d ネットワークインタフェイス ホスト名
(コマンドの実行例)

とりあえず、取得の方法がいまいち分からない場合、-oオプションでどこかにデータを取得しておいてから-iオプションでインポートさせるときにいろんなオプション表示を行ってみてはどうだろうか? snoopに関して詳細な情報は下記PDFファイルを参考下さい。

(例)キャプチャー中のパケットを16進で表示
# snoop -x 0
Using device /dev/hme (promiscuous mode)
 10.8.44.195 -> cst34052     TELNET C port=1860
           0: 0800 20a6 dc02 0000 e23f 9ad5 0800 4500    .. ......?....E.
          16: 0028 f46b 4000 8006 98ca 0a08 2cc3 0a08    .(.k@.......,...
          32: 2cc7 0744 0017 6810 c11c fd82 5aca 5010    ,..D..h...・Z.P.
          48: 21a5 97c0 0000 2020 2020 2020              !.....

cst34052 -> 10.8.44.195  TELNET R port=1860 Using device /dev/hm
           0: 0000 e23f 9ad5 0800 20a6 dc02 0800 4500    ...?.... .....E.
          16: 0052 92c7 4000 3c06 3e45 0a08 2cc7 0a08    .R..@.<.>E..,...
          32: 2cc3 0017 0744 fd82 5aca 6810 c11c 5018    ,....D・Z.h...P.
          48: 60f4 c322 0000 5573 696e 6720 6465 7669    `.."..Using devi
          64: 6365 202f 6465 762f 686d 6520 2870 726f    ce /dev/hme (pro
          80: 6d69 7363 756f 7573 206d 6f64 6529 0d0a    miscuous mode)..

(例)キャプチャするパケットをファイルとして保存
# snoop -o /work/snoop.2004.2.2
Using device /dev/hme (promiscuous mode)
15 --------キャプチャしたパケット数

(例)キャプチャしたをファイルを詳細モードで表示
# snoop -v -i /work/snoop.2004.2.2
ETHER:  ----- Ether Header -----
ETHER:
ETHER:  Packet 1 arrived at 15:10:56.69
ETHER:  Packet size = 60 bytes
ETHER:  Destination = 8:0:20:a6:dc:2, Sun
ETHER:  Source      = 0:0:e2:3f:9a:d5, Acer Counterpoint
ETHER:  Ethertype = 0800 (IP)
ETHER:
IP:   ----- IP Header -----
IP:
IP:   Version = 4
IP:   Header length = 20 bytes
IP:   Type of service = 0x00
IP:         xxx. .... = 0 (precedence)
IP:         ...0 .... = normal delay
IP:         .... 0... = normal throughput
IP:         .... .0.. = normal reliability
IP:   Total length = 40 bytes
IP:   Identification = 65132
IP:   Flags = 0x4
IP:         .1.. .... = do not fragment
IP:         ..0. .... = last fragment
IP:   Fragment offset = 0 bytes
IP:   Time to live = 128 seconds/hops
IP:   Protocol = 6 (TCP)
IP:   Header checksum = 8ec9
IP:   Source address = 10.8.44.195, 10.8.44.195
IP:   Destination address = 10.8.44.199, cst34052
IP:   No options
IP:
TCP:  ----- TCP Header -----
TCP:
TCP:  Source port = 1860
TCP:  Destination port = 23 (TELNET)
TCP:  Sequence number = 1745928577
TCP:  Acknowledgement number = 4253183693
TCP:  Data offset = 20 bytes
TCP:  Flags = 0x10
TCP:        ..0. .... = No urgent pointer
TCP:        ...1 .... = Acknowledgement
TCP:        .... 0... = No push
TCP:        .... .0.. = No reset
TCP:        .... ..0. = No Syn
TCP:        .... ...0 = No Fin
TCP:  Window = 8451
TCP:  Checksum = 0x83fa
TCP:  Urgent pointer = 0
TCP:  No options
TCP:
TELNET:  ----- TELNET:   -----
TELNET:
TELNET:  ""
TELNET:
なお、このsnoopのデータで、バイナリのデータであれば、etherealのツール(フリー)で編集することも可能。Windowsでも簡単にできるのでお勧めです。


(3)truss

 trussコマンドは、Solaris環境で、システムコールやシグナルをトレースできるので、問題の解決に役立つことが多い。trussコマンドは全ての実行形式のファイル(バイナリファイルやシェルスクリプ等)に対して使用可能で、また起動中のプロセスのprocess ID (PID)に使用することも可能。
Solaris 10ではDtraceというのがありますが、デバッグ用には向いてますが、Solarisのプロセスやデーモンなどの動作も確認したいtrussもお勧めです。
# truss -aef cat hoge
24422: execve("/usr/bin/cat", 0xFFBEFC74, 0xFFBEFC80) argc = 2
24422: argv: cat hoge
24422: envp: PWD=/tmp TZ=Japan PAGER=less _INIT_RUN_NPREV=0 HZ=100
:(省略)
24422: open("/usr/lib/locale/ja/methods_ja.so.2", O_RDONLY) = 3
24422: fstat(3, 0xFFBEEA9C) = 0
24422: mmap(0xFF380000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0xFF380000
24422: mmap(0x00000000, 90112, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = 0xFF350000
24422: mmap(0xFF364000, 2988, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 16384) = 0x
FF364000
24422: munmap(0xFF356000, 57344) = 0
24422: memcntl(0xFF350000, 3120, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
24422: close(3) = 0
24422: munmap(0xFF380000, 8192) = 0
24422: fstat64(1, 0xFFBEFB78) = 0
24422: open64("hoge", O_RDONLY) Err#2 ENOENT
24422: open("/usr/lib/locale/ja/LC_MESSAGES/SUNW_OST_OSCMD.mo", O_RDONLY) = 3
24422: fstat64(3, 0xFFBEF080) = 0
24422: mmap(0x00000000, 815299, PROT_READ, MAP_SHARED, 3, 0) = 0xFF100000
24422: close(3) = 0
:(省略)
cat: 24422: write(2, " c a t : ", 5) = 5・・・C
hoge24422: write(2, " a a a a", 4) = 4
をオープンできません。
24422: write(2, " A4F2A5AAA1BCA5D7A5F3A4".., 24) = 24
24422: close(1) = 0
24422: llseek(0, 0, SEEK_CUR) = 11867
24422: _exit(2)

hogeをオープンしようとしたら、Err#2 ENOENTになった。Err#2の意味は「ファイルまたはディレクトリが存在しない。指定された名前を持つファイルが存在すべきなのに存在しない。または、パス名のいずれかのディレクトリが存在しない。」という意味。システムコールのエラー一覧と意味は「man -s2 intro」で確認でき、シグナル一覧と意味は「man -s3HEAD signal」で確認できます。

Google
WWW を検索 Solarisでいきましょか?」内を検索






Copyright (C) 2008 Solarisでいきましょか? All rights reserved