現在位置: ホーム / Oracle Ch. / Oracle Linux のエンタープライズ向けソリューション「Dtrace」

Oracle Linux のエンタープライズ向けソリューション「Dtrace」

前回は、Oracleがエンタープライズ向けのソリューションとしてOracle Linux用に出している「Ksplice」というツールについて説明しました。今回は、もう一つの代表的なツールである「DTrace」について説明します。

DTraceの歴史

DTraceはサン・マイクロシステムズが2003年11月に発表した、システムに関連した問題をリアルタイムで分析する機能です。2005年にSolaris10に組み込まれてリリースされ、OpenSolaris、Mac OS X、FreeBSDなどに搭載されています。

このDTraceをLinux上に移植したものがDTrace for Linuxになります。Oracle LinuxでDTraceのベータサポートが2011年に開始され、2012年12月にDTrace for Oracle Linux 6として一般に公開されました。

DTraceの概要

DTraceはOracle Linuxにビルトインされている、広範囲で動的トレースを行えるツールです。DTraceを使うことにより、システムを検査してパフォーマンス障害をトラックしていくことが可能になります。
DTraceでは、調査のためにプログラムを作ります。これはユーザ空間とカーネル空間をまたがって機能します。このツールを使うことにより、様々な問題の調査に対して、簡潔に回答を出すことが可能となります。

dtrace-1

DTraceのインストール

DTraceはUnbreakable Linux Network (ULN)経由でのみ、利用が可能です。

使用するシステムをULNにレジストする必要があります。ULNにログインし、システムのサブスクリプション情報を編集してDTraceチャネルを含むようにします。

dtrace-2

  1. チャネルの変更後、rootアカウントで‘yum -y update’ を実行し、システムを再起動します。
  2. 起動時にUEK3カーネルで起動するように選択し、UEK3カーネルで起動後にDTraceのインストールを継続します。
  3. 下記のコマンドで、dtrace-utilsをインストールします。
# yum -y install dtrace-utils

DTraceの使用例

“dtrace”コマンドでD言語を使用する“コンパイラ”を起動し、以降Dプログラムを実行していきます。
また、DTraceのCLIから一行のDプログラムを実行することも可能です。

例1.

例として、下記の一行のDプログラムを実行します。

# dtrace -p 3007 -n 'syscall:::entry { @num[probefunc] = count(); }'

これにより、IDが3007のプロセスによって起動されたシステム・コールと、各システム・コールが起動された回数を表示します。

dtrace-3

例2.  

例として、下記のコマンドを実行します。

# dtrace -n 'syscall::read:entry /execname=="firefox"/{@dist["firefox"]=quantize(arg2);}'

これにより、実行されているfirefoxのすべてのインスタンスによって呼び出されたread()コールのarg2に指定されたサイズの分布を表示します。

dtrace-4

例3.   

また、下記のようにスクリプトにしてdtraceを使用することも可能です。
下記の例では、syscalls.dスクリプトを実行して、PID 5178が使用しているシステム・コールと、各システム・コールが起動された回数を調査します。

-    syscalls.d

dtrace-5

-    結果

dtrace-6

まとめ

今回は、Oracle Linuxの大きな特徴であるDTraceについて説明しました。このDtraceを用いることにより、稼働中のシステムの動作に関する情報を動的に追跡、解析することができます。また、これらの調査を、ソースコードを変更することなくおこなうことができることから、本番系でのみパフォーマンス障害などの問題が発生し、開発系では再現しない時などに、問題となっている個所を特定するための強力なツールとして使用することが可能です。

Oracle_Form