【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
OpenSolaris

最終回 DTraceでトラブルシューティング


この連載では、サーバOSとして十数年発展してきた「Solaris」をオープンソース化した「OpenSolaris」を紹介し、ブログサーバ「Roller」と組み合わせて運用していくうえで有用なさまざまな知識を紹介していきます。(編集部)

サン・マイクロシステムズ株式会社
OpenSolarisエバンジェリスト
原口 章司
2008/8/6

 前回「シングルノードで手軽にクラスタを試す」までの連載で、OpenSolarisの機能や特徴を紹介しながら、ブログサーバを構築する方法を解説してきました。Solarisコンテナ、ZFS、Open HAクラスタを使い、予期されるさまざまな障害に備える強固なサーバ構築のノウハウをご理解できたと思います。

 最終回の今回は、ブログサーバ運用中にシステムの状態を監視したり、発生したシステム障害や不具合の原因究明に有効となるDTrace(動的トレース)を紹介します。

DTraceの概要

 システムが障害を起こしてクラッシュしたときや、アプリケーションが異常終了しコア・ダンプした場合は、そのダンプファイルから、クラッシュや異常終了直前の状態を解析することができます。

 しかし、このような致命的な状態になる前、例えば稼働中のあるドライバやアプリケーションから応答がなかったり、CPUの稼働率やメモリの使用量が予想以上に高い場合などに、システムでいま何が起きて、どのような状態にあるのかをリアルタイムに知りたいこともあります。DTraceは、このような状況でのトレースに特に有効です。

 OpenSolarisでは、カーネルをはじめとするあらゆる個所に「Probe(プローブ)」と呼ばれる計測ポイントが実装されています。実装されているProbeの数は、小さいシステムでも約3万カ所、筆者のSXDE 1/08 x86ノートPCの環境では、実に5万8400カ所の計測ポイントが実装されています。

 これらの計測ポイントは、通常「計測用の窓」が閉じた状態(Probe=オフ)であり、稼働中のシステムやアプリケーションへのオーバヘッドはほとんどありません。

 トレースのためにいったんDTraceが稼働すると、計測したいポイントの「計測用の窓」が開き(Probe=オン)、カーネルで使用されている構造体や関数の出入り口での情報など、さまざまな情報をこの計測ポイントから取得できます。このオンとオフが動的に切り替えられるため、システムやアプリケーションを再起動する必要はありません。

 DTraceはセキュリティやプライバシーを考慮し、デフォルトではルート権限でのみ実行可能です。サーバシステムの特定の管理者やPC上で個人で使う場合など、ユーザーモードでDTraceを使う場合には、/etc/user_attrファイルの中でDTrace使用の特権を与えます。

図1
図1 DTraceのアーキテクチャ

 またDTraceには、Probeを動的に起動し、情報収集や処理を行うスクリプト言語(Dスクリプト)が含まれています。

 本稿では、DTraceの基本的な使用方法についての説明は省略します。DTraceやDスクリプト言語の詳細については、「Solaris動的トレースガイド」をご覧ください。またサンのDTraceの紹介サイトも参考になると思います。

DTraceによるブログサーバのモニタリング

 では、DTraceを使って、今回の連載で構築したブログサーバをモニタリングしてみましょう。今回のブログサーバ構築例では、2つのローカルゾーンが大域ゾーン上で稼働しています。

図2
図2 ブログサーバのモニタリング

solaris# zoneadm list -vc
ID NAME            STATUS  PATH                     BRAND  IP
0 global           running /                        native shared
1 tomcat_zone      running /pool/zones/tomcat_zone  native shared
2 mysql_zone       running /pool/zones/mysql_zone   native shared

 Solarisコンテナを使用したシステムの場合、ローカルゾーン内のDTraceによるトレースは、大域ゾーン上のスーパーユーザーでのみ可能です。dtrace(1M)コマンドを使って、ぞれぞれのローカルゾーンのシステムコール呼び出しのカウントを計測してみます。

solaris# dtrace -n 'syscall:::entry { @[zonename]=count(); }'
dtrace: description 'syscall:::entry ' matched 235 probes
^C   ←数秒後 "Ctrl-C"を入力します
mysql_zone                                    173
tomcat_zone                                   255
global                                       7423
solaris#

 次に、tomcat_zoneで実行中のプログラムのシステムコール呼び出しのカウントを計測してみます。

solaris# dtrace -n 'syscall:::entry /zonename == "tomcat_zone"/ { @[execname]=count(); }'
dtrace: script 'tomcat_zone.d' matched 235 probes
^C   ←数秒後 "Ctrl-C"を入力します
snmpd                                           1
svc.configd                                     1
svc.startd                                      1
java                                          232
solaris#

 稼働中のApache RollerはすべてJavaで書かれており、トレースするにはtomcat_zoneで実行中のjavaプロセスをトレースします。DTraceには、Javaのスタック・トレース用にjstack()アクションが用意されていますので、まずはこれを使ってみましょう。

dtrace -n 'syscall::write:entry /zonename == "tomcat_zone" && execname == "java"/ { jstack(); }'

 この例では、tomcat_zoneでシステムコールwrite()関数が呼ばれたときのJavaのスタック・トレースが表示されます。今回の例では、tomcat_zoneはApache Roller専用のコンテナですので、Rollerユーザーの誰かが新規のエントリを投稿したり、読者の誰かがコメントを投稿したときなど、システムへの書き込み処理が行われたときだけに下記のようなトレースを表示します。

...
1 78111 write:entry
     libc.so.1`__write+0x15
     libjvm.so`__1cDhpiFwrite6FipkvI_I_+0xa0
     libjvm.so`JVM_Write+0x36
     libjava.so`writeBytes+0x154
     libjava.so`Java_java_io_RandomAccessFile_writeBytes+0x3f
     java/io/RandomAccessFile.writeBytes([BII)V
     java/io/RandomAccessFile.write([BII)V
     org/apache/lucene/store/FSOutputStream.flushBuffer([BI)V
     org/apache/lucene/store/OutputStream.flush()V
     org/apache/lucene/store/OutputStream.close()V
...

第6回へ
1/4

Index
OpenSolarisでサーバ構築
 第7回 DTraceでトラブルシューティング
Page 1
 DTraceの概要
 DTraceによるブログサーバのモニタリング
  Page 2
 Javaアプリケーションを詳細にトレース
 統計情報でシステム全体の状態を把握
  Page 3
 MySQLサーバのトレース
  Page 4
 拡張可能な「DTraceツールキット」
 DTraceの可能性
 連載の最後に

Linux Square全記事インデックス


 Linux Squareフォーラム サーバ構築・運用関連記事
連載:Heartbeatでかんたんクラスタリング(連載中)
オープンソースソフトウェアの「Heartbeat」を使ってHAクラスタを実現し、サービスを「落とさない」仕組みを実現します
特集:Apache 2.2でWebサイトをパフォーマンスアップ!
最新安定版Apache 2.2は、何が変わったのか? 最新のApacheを新機能の使い方とともに解説する
連載:実用 Apache 2.0運用・管理術(全8回)
本連載では、Apache 2.0の運用や管理方法を解説する。まず必須設定と基本的なセキュリティ対策を行い今後の運用に備える
連載:実用 BIND 9で作るDNSサーバ(全15回)
本連載では、BIND 9の構築/運用方法を解説していく。実際に役立つことを目的に、セキュリティや大規模運用などのテーマを取り上げていく
連載:実用qmailサーバ運用・管理術(全14回)
本連載を通して、qmailによるメールサーバの高度な構築・運用・管理術を紹介。SPAM対策やML管理からサーバでのウイルスチェックなどまで
特集:Samba 3.0の全貌 改訂版
Samba 3.0リリースから8カ月。ここであらためて、Samba 3.0系列の新機能、インストール方法、国際化の現状を解説する

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します

ホワイトペーパーTechTargetジャパン

Linux Square フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)



- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

New!
  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

  @IT「Windows 7」 特設サイトオープン!
最新情報・移行ノウハウを公開しています