Pivotal Knowledge Base

フォローする

GemFire のトランザクション処理におけるメモリ管理

適用範囲

GemFire 6.6 以降

目的

デフォルトでは、HA 対応のため、GemFire は過去 1,000 件分のトランザクション履歴情報をメモリに保持する。したがって、もし、各トランザクションにおいて多くのデータエントリーに対する更新がある場合、GemFire はそれらの更新を保持するために多量の Java ヒープメモリを費やすことになる。この動作によるメモリ使用量を考慮にいれていないと、次第に OutOfMemoryError を引き起こす結果となる可能性がある。

本記事においては、GemFire のトランザクション処理におけるメモリ使用状況を管理する方法について議論する。

解説

GemFire キャッシュを起動する際に、以下のような Java システムプロパティーを指定することによって、過去何件分のトランザクション履歴情報を保持するか設定することが可能である。

-Dgemfire.transactionFailoverMapSize=[トランザクションのコミット件数]

もし、GemFire のトランザクション履歴情報のメモリ使用状況が要因となり、OutOfMemoryError が発生するような場合、当該値をデフォルトの 1,000 以下の適切な件数に減らすべきである。例えば、以下のように設定する。

-Dgemfire.transactionFailoverMapSize=100

しかしながら、多くのトランザクションが並行して実行されている最中に GemFire メンバーがクラッシュした場合、この値を減らすことによって一部のトランザクションを失ってしまう可能性が高まることに留意されたい。

逆に、非常に多くのトランザクションを並行して実行することを担保するため、この値を増やすことも考えられる。

gfsh を用いてキャッシュサーバーを起動する際には、この Java システムプロパティーは以下のように設定することが可能である。

gfsh start server ... --J=-Dgemfire.transactionFailoverMapSize=100

コメント

Powered by Zendesk