連載インデックスへ
Java on Linuxを鬼凄ネイティブデバッグ!(前篇)

OpenJDK+SystemTapで
トラブル解析はここまでできる


NTT OSSセンタ
応用技術ユニット Webグループ 末永恭正
2011/9/22


Javaでデバッグしにくい3つの場面


今回の主な内容

Javaでデバッグしにくい3つの場面
JDKのオープンソース実装「OpenJDK」とは
カーネル空間を動的にトレース「SystemTap」とは
OpenJDK+SystemTapでできる6つの鬼凄
SystemTapにおけるプローブポイントの種類
コラム CallNonvirtual系関数の
プローブポイントのバグ

OpenJDK+SystemTapを動かしてみよう
次回は、OpenJDK+SystemTapの5つの使用例

 Javaアプリケーションで構築されたシステムの障害や性能問題が発生した場合、大半はデバッガプロファイラミドルウェアやサードパーティが提供するツールを用いることで解析できてしまいます。

 しかし、以下のような状況ではJavaの世界からのアプローチがしにくく、通常のデバッグノウハウが使えないことがあります。

  1. プロセス再起動が許されないシステムでの情報取得がしたいとき
    • 本番環境でしか発生せず、テスト環境でデバッグできない問題の場合
    • GC(ガベージ・コレクション)ログ(-Xloggcなど)のように、javaコマンド起動オプションを与えなければ取得できない情報が必要な場合
  2. ソース変更が許されない場合に、特定状況下の情報を取得したいとき
    • ある特定のメソッドなどが実行された瞬間のスレッドダンプスタックトレースなどが必要な場合
    • ソースの変更ができない、環境の制約などでデバッガが使用できない場合など
  3. 問題個所がアプリケーションなのか、JREなのか、OSなのか不明なとき
    • 通信やファイルシステムなど、プラットフォームと密接に関係する部分での処理遅延やフリーズなど
    • CPU使用率や(ネイティブレベルの)メモリ使用量が上昇しているが、Javaレベルで怪しいところが見当たらない

 このような場合、Linux上のJavaシステムでは「OpenJDKSystemTap」で突破口が見出だせることがあります。本企画では、これらの組み合わせによるJavaアプリケーションの解析手法について、5つの使用例を交えながら説明します。

JDKのオープンソース実装「OpenJDK」とは

 「OpenJDK」は、Java SE仕様に準拠した唯一のJDKオープンソース実装です。現在JDK 6/7/8の3つのメジャーバージョンがJava SEのリファレンス実装としてソースコートが公開されており、オラクルだけでなく、世界中の開発者によるバグ報告やパッチ提供が可能になっています。

 現在、FedoraやUbuntuをはじめとした、多くのメジャーLinuxディストリビューションでは、「IcedTea」プロジェクトのパッチを組み込んだ実行バイナリなどがパッケージ提供されており、OracleJDKとの違いを意識することなく開発・利用できます。

 2010年に開催されたJavaOne 2010の基調講演では、OpenJDKはJavaのリファレンス実装を担い、オラクルが今後もOpenJDKコミュニティをサポートしていくとの発表がありました。

カーネル空間を動的にトレース「SystemTap」とは

 「SystemTap」は、Linuxカーネル2.6から導入された、カーネル空間を動的にトレースするソフトウェアです。現在ではFedoraやUbuntuを始めとした多くのLinuxディストリビューションで配布されています。

 バージョン0.6よりユーザー空間の「プローブ」(計測)機能(詳細は、後述)が試験的に実装され始め、カーネル空間とユーザー空間の動作状況を一元的に確認可能になりました。詳細は、以下の記事もご覧ください。

OpenJDK+SystemTapでできる6つの鬼凄

 Solaris版JDKでは、以前より「DTrace」を用いたデバッグがサポートされていました。

 IcedTeaプロジェクトでは、DTrace向けの「Probe」(プローブ)をLinuxのSystemTap向けに移植したスクリプト群「Tapsetが提供されており、OpenJDKの特徴の1つになっています。

 これらのスクリプト、およびSystemTap本来の機能より、以下の6つのことが実現可能になります。次ページから、具体的に見ていきます。

  1. 数多くの情報を簡単に、自由に選択できる
  2. JavaVM内部イベントの検知
  3. JavaVMよりも下のレベルの状況把握
  4. JNI関数の呼び出し状況の把握
  5. 動的なアタッチ
  6. SystemTapの「guru」でカーネルレベルの解析
 
1-2-3

 Index
前篇 OpenJDK+SystemTapでトラブル解析はここまでできる!
Page1
Javaでデバッグしにくい3つの場面
JDKのオープンソース実装「OpenJDK」とは
カーネル空間を動的にトレース「SystemTap」とは
OpenJDK+SystemTapでできる6つの鬼凄
  Page2
SystemTapにおけるプローブポイントの種類
コラム CallNonvirtual系関数のプローブポイントのバグ
  Page3
OpenJDK+SystemTapを動かしてみよう
次回は、OpenJDK+SystemTapの5つの使用例


Java Solution全記事一覧

TechTargetジャパン

Java Agile フォーラム 新着記事

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

RSSフィード

キャリアアップ

- PR -

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る
- PR -

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

ソリューションFLASH

「ITmedia マーケティング」新着記事

2013年4月の検索市場――Googleは高水準を維持、MicrosoftとYahooは今一歩及ばず
米国における4月の検索件数約200億件のうち、Googleは133億件、Bingは35億件、Yahooが24...

浜松ホトニクス、オラクルのCMS「Oracle WebCenter Sites」でグローバルサイトを刷新――問い合わせ2割増、負荷5割軽減
日本オラクルは5月22日、光技術の研究/開発で世界的な評価を受けている浜松ホトニクスが...

第12回 カナダのマクドナルドが宣材写真の制作プロセスを公開。「不都合な真実」を自ら明るみにするその真意とは?
カナダのマクドナルドが2012年6月にYouTubeで公開した動画が再燃し、その再生回数が850万...