});Javaでデバッグしにくい3つの場面Javaアプリケーションで構築されたシステムの障害や性能問題が発生した場合、大半はデバッガやプロファイラ、ミドルウェアやサードパーティが提供するツールを用いることで解析できてしまいます。以下のような状況ではJavaの世界からのアプローチがしにくく、通常のデバッグノウハウが使えないことがあります。プロセス再起動が許されないシステムでの情報取得がしたいとき本番環境でしか発生せず、テスト環境でデバッグできない問題の場合GC(ガベージ・コレクション)ログ(-Xloggcなど)のように、javaコマンド起動オプションを与えなければ取得できない情報が必要な場合ソース変更が許されない場合に、特定状況下の情報を取得したいときある特定のメソッドなどが実行された瞬間のスレッドダンプやスタックトレースなどが必要な場合ソースの変更ができない、環境の制約などでデバッガが使用できない場合など問題個所がアプリケーションなのか、JREなのか、OSなのか不明なとき通信やファイルシステムなど、プラットフォームと密接に関係する部分での処理遅延やフリーズなどCPU使用率や(ネイティブレベルの)メモリ使用量が上昇しているが、Javaレベルで怪しいところが見当たらないこのような場合、Linux上のJavaシステムでは「OpenJDK+SystemTap」で突破口が見出だせることがあります。本企画では、これらの組み合わせによるJavaアプリケーションの解析手法について、5つの使用例を交えながら説明します。SE仕様に準拠した唯一のJDKオープンソース実装です。SEのリファレンス実装としてソースコートが公開されており、オラクルだけでなく、世界中の開発者によるバグ報告やパッチ提供が可能になっています。kwout現在、FedoraやUbuntuをはじめとした、多くのメジャーLinuxディストリビューションでは、「IcedTea」プロジェクトのパッチを組み込んだ実行バイナリなどがパッケージ提供されており、OracleJDKとの違いを意識することなく開発・利用できます。2010の基調講演では、OpenJDKはJavaのリファレンス実装を担い、オラクルが今後もOpenJDKコミュニティをサポートしていくとの発表がありました。カーネル空間を動的にトレース「SystemTap」とは「SystemTap」は、Linuxカーネル2.6から導入された、カーネル空間を動的にトレースするソフトウェアです。現在ではFedoraやUbuntuを始めとした多くのLinuxディストリビューションで配布されています。kwoutバージョン0.6よりユーザー空間の「プローブ」(計測)機能(詳細は、後述)が試験的に実装され始め、カーネル空間とユーザー空間の動作状況を一元的に確認可能になりました。詳細は、以下の記事もご覧ください。kwoutOpenJDK+SystemTapでできる6つの鬼凄Solaris版JDKでは、以前より「DTrace」を用いたデバッグがサポートされていました。kwoutIcedTeaプロジェクトでは、DTrace向けの「Probe」(プローブ)をLinuxのSystemTap向けに移植したスクリプト群「Tapset」が提供されており、OpenJDKの特徴の1つになっています。これらのスクリプト、およびSystemTap本来の機能より、以下の6つのことが実現可能になります。次ページから、具体的に見ていきます。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。