2012年12月26日水曜日

Oracle Linux 第6回: DTrace for Oracle Linux の利用

こんにちは。サイオステクノロジーの小川です。
今年最後の Oracle Linux 連載は DTrace の使用方法と動作についての紹介をします。

DTrace for Oracle Linux は稼働中のカーネルやアプリケーションの情報を取得し、リアルタイムでのトラブルシューティングを可能にする動的トレーシング機能です。

DTrace の概要は "DTrace for Oracle Linux GA 発表" の記事にて詳細をご案内しております。

ここから DTrace の使用方法と動作を紹介していきます。
まず、ULN にて、該当 Oracle Linux に DTrace のチャンネルを追加します。

  • チャンネル名: Dtrace for Oracle Linux 6 (x86_64) - Latest
  • チャンネルラベル: ol6_x86_64_Dtrace_latest

コマンドラインから確認して、ol6_x86_64_Dtrace_latest が追加されていれば準備は完了です。

[root@ol63uek ~]# rhn-channel --list
ol6_x86_64_Dtrace_latest
ol6_x86_64_MySQL
ol6_x86_64_UEK_latest
ol6_x86_64_addons
ol6_x86_64_latest
ol6_x86_64_oracle

では、DTrace 関連のパッケージをインストールしましょう。なお、DTrace を利用するためには、RHEL 互換 kernel ではなく、UEK を利用する必要があります。


パッケージの確認
[root@ol63uek ~]# yum search dtrace
Loaded plugins: rhnplugin
========================================== N/S Matched: dtrace ===========================================
dtrace-modules-2.6.39-201.0.2.el6uek.x86_64 : dtrace module
dtrace-utils.x86_64 : DTrace user interface.
dtrace-utils-devel.x86_64 : DTrace development headers.
kernel-uek-dtrace.x86_64 : The Linux kernel for DTrace
kernel-uek-dtrace-debug.x86_64 : The Linux kernel compiled with extra debugging enabled
kernel-uek-dtrace-debug-devel.x86_64 : Development package for building kernel modules to match the debug kernel
kernel-uek-dtrace-devel.x86_64 : Development package for building kernel modules to match the kernel
kernel-uek-dtrace-firmware.x86_64 : Firmware files used by the Linux kernel
kernel-uek-dtrace-headers.x86_64 : Header files for the Linux kernel for use by glibc
libdtrace-ctf.x86_64 : Compact Type Format library.
libdtrace-ctf-devel.x86_64 : Compact Type Format development headers.

パッケージのインストール
[root@ol63uek ~]# yum install dtrace-utils
~ 中略 ~
=====================================================================================================
 Package                               Arch    Version               Repository                 Size
=====================================================================================================
Installing:
 dtrace-utils                          x86_64  0.3.2-1.el6           ol6_x86_64_Dtrace_latest  255 k
Installing for dependencies:
 cloog-ppl                             x86_64  0.15.7-1.2.el6        ol6_x86_64_latest          93 k
 cpp                                   x86_64  4.4.6-4.el6           ol6_x86_64_latest         3.7 M
 dtrace-modules-2.6.39-201.0.2.el6uek  x86_64  0.3.2-1.el6           ol6_x86_64_Dtrace_latest  935 k
 gcc                                   x86_64  4.4.6-4.el6           ol6_x86_64_latest          10 M
 glibc-devel                           x86_64  2.12-1.80.el6_3.6     ol6_x86_64_latest         970 k
 glibc-headers                         x86_64  2.12-1.80.el6_3.6     ol6_x86_64_latest         600 k
 kernel-uek-dtrace                     x86_64  2.6.39-201.0.2.el6uek ol6_x86_64_Dtrace_latest   36 M
 kernel-uek-dtrace-firmware            x86_64  2.6.39-201.0.2.el6uek ol6_x86_64_Dtrace_latest  2.8 M
 kernel-uek-headers                    x86_64  2.6.39-201.0.2.el6uek ol6_x86_64_latest         716 k
 libdtrace-ctf                         x86_64  0.3.2-1               ol6_x86_64_Dtrace_latest   26 k
 libgomp                               x86_64  4.4.6-4.el6           ol6_x86_64_latest         116 k
 mpfr                                  x86_64  2.4.1-6.el6           ol6_x86_64_latest         156 k
 ppl                                   x86_64  0.10.2-11.el6         ol6_x86_64_latest         1.3 M
Transaction Summary
=====================================================================================================
Install      14 Package(s)

Total download size: 58 M
Installed size: 213 M
Is this ok [y/N]:
~ 中略 ~

インストールが終了したら、念のためマシンを再起動します。


再起動時は DTrace に対応した UEK (上の場合、2.6.39-201.0.2.el6ue) でブートする必要があります。

[root@ol63uek ~]# uname -r
2.6.39-201.0.2.el6uek.x86_64

[root@ol63uek ~]# rpm -qa |sort |grep kernel
dracut-kernel-004-284.0.1.el6_3.1.noarch
kernel-2.6.32-279.14.1.el6.x86_64
kernel-firmware-2.6.32-279.14.1.el6.noarch
kernel-uek-2.6.39-200.24.1.el6uek.x86_64
kernel-uek-dtrace-2.6.39-201.0.2.el6uek.x86_64
kernel-uek-dtrace-firmware-2.6.39-201.0.2.el6uek.x86_64
kernel-uek-dtrace-headers-2.6.39-201.0.2.el6uek.x86_64
kernel-uek-firmware-2.6.39-200.24.1.el6uek.noarch

DTrace 関連 kernel モジュールは以下に格納されています。

[root@ol63uek ~]# cd /lib/modules/2.6.39-201.0.2.el6uek.x86_64/kernel/drivers/dtrace/

[root@ol63uek dtrace]# ls -la
total 4588
drwxr-xr-x.  2 root root    4096 Dec 19 09:55 .
drwxr-xr-x. 57 root root    4096 Dec 19 09:55 ..
-rw-r--r--.  1 root root 3316368 Nov  3 07:51 dtrace.ko
-rw-r--r--.  1 root root  349328 Nov  3 07:51 dt_test.ko
-rw-r--r--.  1 root root  339216 Nov  3 07:51 profile.ko
-rw-r--r--.  1 root root  348648 Nov  3 07:51 sdt.ko
-rw-r--r--.  1 root root  326728 Nov  3 07:51 systrace.ko

DTrace のモジュールはインストールはされていても、kernel にはロードされないようです。

したがって modprobe で kernel にロードさせる必要があります。

[root@ol63uek ~]# lsmod  |grep dtrace
※ 出力無し

[root@ol63uek ~]# modprobe dtrace 
[root@ol63uek ~]# modprobe profile
[root@ol63uek ~]# modprobe sdt
[root@ol63uek ~]# modprobe systrace
[root@ol63uek ~]# modprobe dt_test

[root@ol63uek ~]# lsmod  |grep dtrace
dtrace                117990  4 dt_test,systrace,sdt,profile
ctf                      903  1 dtrace

[root@ol63uek ~]# modprobe -l |grep dtrace
kernel/drivers/dtrace/dt_test.ko
kernel/drivers/dtrace/profile.ko
kernel/drivers/dtrace/systrace.ko
kernel/drivers/dtrace/dtrace.ko
kernel/drivers/dtrace/sdt.ko

これで DTrace 利用の準備は完了です。

では早速 DTrace で、プロセスを確認してみましょう。


通常、DTrace を活用する場合、D言語というスクリプト言語で制御を行ないますが、もっと単純に利用する場合、コマンドラインのワンライナーでも利用可能です。

例えば、今回は httpd のプロセスの open システムコールをトレースしてみたいと思います。

トレース中にブラウザからアクセスすると、コンソールにトレース結果が流れてきます。

[root@ol63uek ~]# dtrace -n 'syscall::open*:entry/execname == "httpd"/{ printf("%s %s", execname, copyinstr(arg0)); }'
dtrace: description 'syscall::open*:entry' matched 3 probes
CPU     ID FUNCTION:NAME
  0      9    open:entry httpd /var/www/html/wiki/index.php
  0      9    open:entry httpd /var/www/html/wiki/lib/pukiwiki.php
  0      9    open:entry httpd /var/www/html/wiki/lib/func.php
  0      9    open:entry httpd /var/www/html/wiki/lib/file.php
  0      9    open:entry httpd /var/www/html/wiki/lib/plugin.php
  0      9    open:entry httpd /var/www/html/wiki/lib/html.php
  0      9    open:entry httpd /var/www/html/wiki/lib/backup.php
  0      9    open:entry httpd /var/www/html/wiki/lib/convert_html.php
  0      9    open:entry httpd /var/www/html/wiki/lib/make_link.php
  0      9    open:entry httpd /var/www/html/wiki/lib/diff.php
  0      9    open:entry httpd /var/www/html/wiki/lib/config.php
  0      9    open:entry httpd /var/www/html/wiki/lib/link.php
  0      9    open:entry httpd /var/www/html/wiki/lib/auth.php
  0      9    open:entry httpd /var/www/html/wiki/lib/proxy.php
  0      9    open:entry httpd /var/www/html/wiki/lib/init.php
  0      9    open:entry httpd /usr/share/zoneinfo/Asia/Tokyo
  0      9    open:entry httpd /var/www/html/wiki/pukiwiki.ini.php
  0      9    open:entry httpd /var/www/html/wiki/ja.lng.php
  0      9    open:entry httpd /var/www/html/wiki/default.ini.php
  0      9    open:entry httpd /var/www/html/wiki/rules.ini.php
  0      9    open:entry httpd /var/www/html/wiki/cache/entities.dat
  0      9    open:entry httpd /var/www/html/wiki/plugin/read.inc.php
~ 中略 ~

1回のアクセスでも、かなりのファイルオープンを行なっていることがわかりますね。

このように DTrace を利用することで、システムのトレーシングを簡単に行なう事が可能です。

DTrace for Oracle Linux に関して、より詳細な情報や利用方法、サンプルスクリプトをお求めの場合、以下 Oracle Linux のドキュメントをご参照ください。

Oracle Linux Administrator's Solutions Guide for Release 6
Chapter 11. DTrace
http://docs.oracle.com/cd/E37670_01/E37355/html/ol_dtrace.html

0 件のコメント:

コメントを投稿