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

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

» 2005年04月22日 13時53分 公開
[大澤文孝,ITmedia]

 Solaris 10の目玉となる機能のひとつに、実行中のサーバ情報をいつでも取得できる「DTrace」がある。DTraceは、稼働サーバ上で思うようなパフォーマンスが得られなかったり、トラブルが生じた際に原因究明するのに役立つ機能だ。この「OS選択の新常識」Solaris特集では、DTraceを使うと具体的にどのような情報を取得でき? どのようなシーンで役立つのか? その実例を解説していくことにしよう。

DTraceの仕組み

 まずは簡単に、DTraceの仕組みから説明する。

 Solaris 10の内部には、「プローブ」と呼ばれる約3万個所のデータ観測ポイントが用意されている。そして、このプローブを提供するプログラムのことを「DTraceプロバイダ」と呼ぶ。DTraceプロバイダは、表1に示すいくつかのカテゴリに分類されているのだ。

プロバイダ 提供される主な情報
dtrace DTraceの開始時や終了時、エラー発生時などにイベントが発生するプローブ。後述のDスクリプトでプログラムするときに、初期化処理や終了処理、エラー処理などを記述する時に用いる
lookstat ロック状態が変化した時にイベント発生するプローブ
profile 一定時間ごとにタイマイベントを発生するプローブ。定期的に値を集計したい時などに用いる
fbt Function Boundary Tracing。カーネル内部の関数への突入/退出ごとにイベントを発生するプローブ
syscall システムコールへの突入/退出ごとにイベント発生するプローブ
sbt Statically Defined Tracing。アプリケーション定義のプローブ。アプリケーション開発者があらかじめsys/sdt.hにある関数群を呼び出し、DTraceのイベントを発生させるように構成する時、該当ルーチンを通過するとイベント発生する
sysinfo カーネルのステータス情報(kstat -n sysで取得できる情報)を提供するプローブ
vminfo カーネルの仮想メモリ情報(kstat -n vmで取得できる情報)を提供するプローブ
proc プロセスの生成、終了、シグナル受信などが発生した時にイベント発生するプローブ
sched CPUスケジューリングに関する情報を提供するプローブ
io ディスク入出力情報に関するプローブ。iostatコマンドで取得できる情報を提供する
mib Management Information Bases(MIB)情報を提供するプローブ。kstat -nやnetstatコマンドで取得できる情報を提供する
fpuinfo SPARCプロセッサのFPUシミュレート機能状態を提供するプローブ
pid 任意のプロセスIDをもつプロセス内の指定した位置の関数への突入/退出ごとにイベントを発生するプローブ
plockstat プロセスのロック状態を知らせるプローブ
fasttrap ユーザープロセスがDTraceを呼び出すときに、そのユーザープロセスに対してデータを流し込むためのハンドラ。現状では利用されない
表1■DTraceプロバイダ種別

 プローブから何か情報を得るためには、dtraceコマンドを用いる。dtraceコマンドを始めとするプローブから情報所得するプログラムを「DTraceコンシューマ」という。

 DTraceコンシューマを使ってプローブを活性化すると、プローブ部分を通過した時にDTraceコンシューマがコールバックされる仕組みだ。この時、引数としてプローブからの情報が渡される。

 つまりDTraceとは、あらかじめプローブに対して「該当部分を通過したら通知してほしい」などと登録することにより、カーネルや実行中のアプリケーションをリアルタイムにトレースする機能なのだ(図1)。

図1■DTraceの仕組み

 各種DTraceプロバイダは、標準で組み込まれており、DTraceを使う時にカーネルやアプリケーションを再コンパイルする必要はない。

 なお標準では、DTraceを利用できるユーザーは、rootユーザーのみに制限されている。これは、プローブからメモリへの読み書きや送受信されているデータ(キー入力も含む)を覗き見ることができるため、セキュリティ上好ましくないためだ(実際に後の例で、ファイルへの書き込みを覗き見る方法を例として説明する)。

       1|2|3|4|5|6|7|8 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ