検索
特集

カーネル挙動を追尾する「DTrace」の実力OS選択の新常識(2/8 ページ)

Solaris 10の強化機能としてクローズアップされることが多い「DTrace」。さまざまなサービスが並列稼働する基幹サーバでは、カーネル挙動によってボトルネックを判断することも多い。DTraceは、解決するための打開策となるのか? 実例サンプルで検証していく。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

 特定のユーザーやプロセスに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.

ページトップに戻る