カーネル挙動を追尾する「DTrace」の実力:OS選択の新常識(2/8 ページ)
Solaris 10の強化機能としてクローズアップされることが多い「DTrace」。さまざまなサービスが並列稼働する基幹サーバでは、カーネル挙動によってボトルネックを判断することも多い。DTraceは、解決するための打開策となるのか? 実例サンプルで検証していく。
特定のユーザーやプロセスにDTraceを利用できるよう設定することもできるが、セキュリティ上の問題があるので、有効にする場合には十分な注意が必要だ。
手始めとなるdtraceコマンドのプローブ活性化
それでは実際に、DTraceがどのようなものか、簡単に体験してみよう。dtraceコマンドに「-l」オプションを指定すると、提供されているプローブ一覧を得ることができる。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
結果を見ると分かるように、それぞれのプローブには、ID番号が付けられている。そしてプローブは、「PROVIDER」「MODULE」「FUNCTION」「NAME」で階層化されている仕組みを持つ。
具体的に、どのプローブがどのような時にイベントを発生し、どのような情報が得られるのかといった情報は、「Solaris Dynamic Tracing Guide」(関連リンク)に記述されているので、これを読んで調べることになる。
例えば、「Chapter 28 mib Provider」を見ると、mibプロバイダには、ICMPメッセージ(pingコマンドやtracerouteコマンドなどで送受信されるデータ)が到来すると、イベント発生する「icmpInMsgs」というプローブが存在することが分かる。ここでは、例として、このicmpInMsgプローブを捕らえる方法を見ていこう。
まずは、次のようにして、PROVIDERやMODULE、FUNCTION、NAMEを調べる。
# dtrace -l | grep icmp_inbound icmpInMsgs
19971 mib ip icmp_inbound icmpInMsgs
この結果、ID番号は「19971」、PROVIDERは「mib」、MODULEは「ip」、FUNCTIONは「icmp_inbound」、NAMEは「icmpInMsgs」であることが分かる。
特定のプローブを活性化するには、dtraceコマンドで「-n」オプションを使い、「PROVIDER:MODULE:FUNCTION:NAME」のように「:(コロン)」で区切った文字列を指定する。
# dtrace -n mib:ip:icmp_inbound:icmpInMsgs
dtrace: description 'mib:ip:icmp_inbound:icmpInMsgs' matched 1 probe
これによってicmpInMsgsプローブが活性化する。
この時、ほかの端末からpingを投げてみよう。するとpingコマンドによるICMPメッセージが届くたびに、画面には、次のように表示される。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
icmpInMsgプローブを通過したという旨のメッセージが表示されるのだ。
ここでは、単一のプローブを活性化したが、-nオプションをたくさん指定すれば、複数のプローブを活性化することもできる。
また「*」を使ってワイルドカード指定することも可能だ。例えば、「-n 'mib:ip:icmp_inbound:icmpIn*'」と指定すれば、mib:ip:icmp_inboundモジュールにある、「icmpIn」から始まるすべてのプローブを指定するという意味になる。
なお、dtraceコマンドは自動的には終了しない。終了するには、「Ctrl」+「C」キーを押す。
Copyright © ITmedia, Inc. All Rights Reserved.