WebSphere® eXtreme
Scale は、分散データ・グリッド内にある BackingMap インスタンスの
メモリー消費量の見積もりをサポートします。メモリー消費量の見積もりは、ローカル・データ・グリッドの
インスタンスではサポートされません。特定のマップについて WebSphere eXtreme
Scale が
報告する値は、ヒープ・ダンプ分析によって報告される値と非常に近いものになります。マップ・オブジェクトが複雑な場合、見積もりの
精度が下がる可能性があります。複雑すぎて正確な見積もりができない
キャッシュ・エントリー・オブジェクトについては、ログに CWOBJ4543 メッセージが表示されます。
不必要にマップを複雑にすることを避ければ、より正確な計算が可能になります。
手順
- サイジング・エージェントを使用可能にします。
Java 5 以上の Java 仮想マシン (JVM) を使用している場合、サイジング・エージェントを使用します。サイジング・エージェントにより、
WebSphere eXtreme
Scale は、JVM から追加情報を取得して
見積もりを改善できます。このエージェントは、次の引数を JVM コマンド行に加えることでロードすることができます。
-javaagent:WXS lib directory/wxssizeagent.jar
組み込みトポロジーでは、
WebSphere Application Server プロセスのコマンド行に引数を追加します。
分散トポロジーでは、eXtreme Scale プロセス (コンテナー) および WebSphere Application Server プロセスのコマンド行に引数を追加します。
正しくロードされると、次のメッセージが
SystemOut.log ファイルに書き込まれます。
CWOBJ4541I: 拡張された BackingMap メモリー見積もりが使用可能です。
- 可能な場合は、カスタム・データ型よりも Java データ型を優先させてください。
WebSphere eXtreme
Scale は、以下の型のメモリー・コストを正確に見積もることができます。
- java.lang.String およびストリングがコンポーネント・クラス (String[]) の配列
- すべてのプリミティブ・ラッパー型 (Byte、Short、Character、Boolean、Long、Double、Float、Integer) およびプリミティブ・ラッパーがコンポーネント型 (Integer[]、Character[] など) の配列
- java.math.BigDecimal および java.math.BigInteger、そしてこれら 2 つのクラスがコンポーネント型である配列 (BigInteger[] および BigDecimal[])
- 時間型 (java.util.Date、java.sql.Date、java.util.Time、java.sql.Timestamp)
- java.util.Calendar および java.util.GregorianCalendar
- 可能であれば、オブジェクトの収容を避けてください。
あるオブジェクトがマップに挿入されると、
WebSphere eXtreme
Scale は、マップがそのオブジェクトへの
参照を唯一保持し、さらにそのオブジェクトが直接参照しているすべてのオブジェクトもマップが
保持するものと想定します。例えば、1000 個のカスタム・オブジェクトをマップに挿入し、そのそれぞれが
同一ストリング・インスタンスを参照している場合、
WebSphere eXtreme
Scale は、その
ストリング・インスタンスを 1000 回分見積もり、その結果、ヒープ上のマップの実際のサイズより多く見積もります。しかし、
WebSphere eXtreme
Scale は以下の一般的な収容シナリオに対し、正しい補正を行います。
- Java 5 Enums への参照
- Typesafe Enum パターンに従ったクラスへの参照
このパターンに従ったクラスは、プライベート・コンストラクターのみが定義され、独自の型の private static final フィールドを少なくとも 1 つ保持し、Serializable を実装する場合は、readResolve() メソッドを実装します。
- Java 5 Primitive ラッパー収容。例えば、new Integer(1) の代わりに Integer.valueOf(1) を使用するなど。
収容を使用する必要がある場合は、前述の手法のいずれかを使用して、より正確な見積もりを入手してください。
- カスタム・タイプはよく考えて使用してください。
カスタム・タイプを使用する場合、オブジェクト・タイプよりもフィールドのプリミティブ・データ・タイプを優先させてください。
また、ユーザー独自のカスタム実装よりも、エントリー 2 にリストされたオブジェクト・タイプを優先させてください。
カスタム・タイプを使用する際は、オブジェクト・ツリーを 1 レベルに保ってください。カスタム・オブジェクトをマップに挿入する場合、WebSphere eXtreme
Scale は挿入されたオブジェクトのコストのみを計算します。これには任意のプリミティブ・フィールドおよびこのオブジェクトが直接参照するすべてのオブジェクトが含まれます。WebSphere eXtreme
Scale は、オブジェクト・ツリーのさらに下の階層までは参照をフォローしません。マップにオブジェクトを挿入し、WebSphere eXtreme
Scale が、見積もりプロセスで
フォローされなかった参照を検出した場合、見積もりが不完全だったクラスの名前が組み込まれたメッセージ・コード CWOBJ4543 が発生します。このエラーが発生したら、正確な合計値としてサイズ統計を信頼するのではなく、マップのサイズ統計を傾向データとして扱うようにしてください。
- 可能な場合、CopyMode.COPY_TO_BYTES コピー・モードを使用します。
CopyMode.COPY_TO_BYTES コピー・モードを使用すると、正常に見積もるにはオブジェクト・ツリーのレベルが深すぎる
(その結果として CWOBJ4543 メッセージが発生する) 場合であっても、マップに挿入される値オブジェクトの
見積もりにおける不確実性を取り除くことができます。