今日の企業は、かつてないほど高性能なインメモリ・アプリケーションに依存している。BI/アナリティクス、SaaS、セールス・マーケティング・オートメーション、仮想化、リアルタイム・コラボレーション、Web 2.0、ソフトウェア製品エンジニアリング・ツールのいずれを使用する場合でも、ビジネス上の重要な質問には瞬時に回答することが求められます。そのためには、メモリを分析することが非常に重要なタスクとなる。
トランザクション(OLTP)と分析(OLAP)データ管理システムの境界がますます曖昧になるにつれ、データベースを分離する傾向がなくなり、メモリ分析を複雑で混乱したものにしています。また、コード開発時に、実際の本番環境でアプリケーションのメモリ使用量を評価することは困難です。コードだけでは、どのオブジェクトがより多くのメモリーを消費するかを把握するのにあまり役に立ちません。高度な診断機能を持つためには、開発者はコードを書く時点でガベージ・コレクションを意識する必要がある。例えば、ログインしているユーザーとセッションIDのデータを格納するオブジェクト "userMap "の配列があるとしよう。この配列の場合、コード内で未使用の配列オブジェクト参照を削除するのを忘れると、これらのオブジェクトによって消費されたメモリが回収されず、メモリ不足の状態やサーバーのクラッシュを引き起こす可能性がある。
ガベージ・コレクター(GC)のようなツールは、自動化されたメモリー管理を提供する。オブジェクトがガベージ・コレクションの対象となるのは、どのスレッドもそのオブジェクトに到達できないとき、つまりそのオブジェクトへの参照がないときだ。とはいえ、GCが未使用のオブジェクト・メモリをすべて回収できるとは限りません。このような状況では、アプリケーションのクラッシュやハングアップを引き起こすメモリ不足に陥りやすくなります。
Eclipseのオープンソースベースのメモリー・アナライザー・ツール(MAT)は、エンジニアリング製品やサービス設計において、厄介なバグを追跡するために広く使用されています。ここでは、米国の大手ホームオートメーション企業との進行中のプロジェクトにおける私の経験に基づき、MATを使用する最大の利点を共有します。私たちは次のような成果を上げることができました:
- メモリ・リークを最小のビットにまで絞り込む
- アプリケーション・パフォーマンスの向上
- タイミングの改善
メモリー・アナライザー・ツール(MAT)とは?
メモリー・アナライザー・ツール(MAT)は、Eclipseのプラグインで、Javaのヒープ・メモリーのトラブルシューティングを行い、メモリー・リークを発見し、メモリー消費を削減します。
メモリを分析する簡単な例を見てみよう。まずEclipseにMATプラグインをインストールする[eclipse -> Help -> Install New Software -> Give this URL:http://download.eclipse.org/mat/1.5/update-site/]。
サンプル・コードではヒープ・サイズを大量に取得するため、"OutOfMemoryError "エラーが発生する。
実行設定のVM引数に"-XX:+HeapDumpOnOutOfMemoryError "を追加し、アプリケーションを実行する。ヒープ・ダンプ・ファイルが作成されました」というメッセージが表示されます。
ダムファイルをクリックすると、MATウィザードが開きます。Leak Suspects Report "を選択すると、システム概要レポートが開き、問題の可能性がある箇所が円グラフで表示されます。
MATはクラスとオブジェクトのヒストグラムも提供します。ロードされたクラスに関連するすべての情報、「スーパークラスの名前」、クラスのローダー、クラスの静的フィールド、クラスのオブジェクト、使用されたコレクションのサイズなどを提供します。
- ヒストグラムの例。
- リーク疑惑報告書の例 :
また、MATは以下のような特徴もあげている:
- ドミネーター・ツリー最も大きなオブジェクトと、それらがどのように生かされているかを列挙する、
- トップ消費者:最も高価なオブジェクトをクラス別、パッケージ別に分類して表示します、
- 重複クラス:複数のクラスローダによってロードされたクラスを検出します。
メモリ・アナライザー・ツールに関するこの基本的な理解によって、Eclipse MATがメモリに関連するリークやその他のバグを追跡するために開発者にとって非常に有用であることが明らかになった。開発者は、コードを研究することでは非常に困難な根本原因を、非常に迅速に見つけることができる。まとめると、これは顧客が高性能アプリケーションに近づくのに役立つということだ。メモリ・アプリケーションを高速化する方法について、あなた自身のアイデアをお聞かせください。このトピックについてより多くの情報が必要な場合、または新しい提案をお寄せいただける場合は、marketing@einfochips.comまで電子メールをお送りください。