InterSystems製品のプロセスが使用するメモリ量について
これは InterSystems FAQ サイトの記事です。
InterSystems製品のプロセスが消費するメモリ領域は以下の6つの領域になります。
プロセスのプライベートな領域
1. プロセスパーティション(ローカル変数テーブル等、プロセスごとに使用するメモリ)
2. 長い文字列(LongString)使用メモリ
3. 文字列スタック...等
プロセス間共有領域
4. データベースキャッシュ
5. ルーチンキャッシュ
6. 一般ヒープメモリ(プロセステーブル、ロックテーブル等)
プロセスが使用するメモリ領域は、「プライベート領域」と「共有領域」の大きく2種類に分かれます。
プライベートな領域はそのプロセスのみが使用し、個々のプロセス毎にメモリを割り当てます。
共有領域は、プロセス間で一つのメモリ領域を共有してアクセスしていますので実体はメモリ上に 1つです。
以下それぞれの領域の値は、管理ポータルで指定します(設定可能な場合)。
(1) プロセスパーティションのサイズ
[システム管理] > [構成] > [システム構成] > [メモリと開始設定] > [プロセスあたりの最大メモリ(KB)]
このプロセスパーティションサイズの初期値は 128 KBytes になっており、プロセスがこの領域を使用すると自動的に拡張します。
管理ポータルでの設定は、このパーティションが拡張できる最大値を設定しています。
(2) 長い文字列(LongString)使用メモリ ※Caché2007.1~
プロセスで実際に長い文字列が使用されると、文字列用のメモリをそのプロセス用のパーティションメモリ領域から割り当てるのではなく、オペレーティングシステムで malloc() により割り当てられます。
上限はありません(仮想メモリ [=物理メモリ+ページファイル] から確保可能な上限まで)。
文字列が破棄されると、長い文字列用に取得したメモリを解放します。
※以下ドキュメントをご参照ください
長い文字列について
(3) 文字列スタック
プロセスで文字列を処理するための作業領域です。Unicode環境では、最大14MBです。
LongStringを無効にした場合(IRISでは無効にはできません)は、Unicode環境で 264 KBです。
(4) データベースキャッシュ
[システム管理] > [構成] > [システム構成] > [メモリと開始設定]:8KBデータベースキャッシュ用メモリ (MB)
(5) ルーチンキャッシュ
[システム管理] > [構成] > [システム構成] > [メモリと開始設定]:ルーチンキャッシュ用メモリ (MB)
(6) 一般ヒープメモリ
[システム管理] > [構成] > [追加の設定] > [メモリ詳細] > [gmheap]
以上の要素でプロセスが使用するメモリサイズが決まり、1つのプロセスでの最大使用メモリはおおよそ上記6つの値の合計値になります。
全プロセスで使用するメモリサイズは以下のとおりです。
[ { (1)プロセスパーティション + (3)文字列スタック } × プロセス数 ]
+ (2) 長い文字列使用メモリ(全プロセス合計※)
+ (4) データベースキャッシュ
+ (5) ルーチンキャッシュ
+ (6) 一般ヒープメモリ
※長い文字列使用メモリとして実際にどの位のメモリ総サイズが必要になるかは、アプリケーション単位で算出する必要があります。
また、各プロセスはアクセスするメモリ領域を管理するページテーブルを持ちます(OSにより管理される領域)。
プロセス間共有領域を Small page として確保している場合は、このページテーブルのサイズが大きくなります(1GB当たり32MB)。
これを Large page で確保するとページテーブルサイズが小さくなります(1GB当たり64KB)。
Large page で確保した場合は、起動時に messages.log/cconsole.log に以下のメッセージが出力されます。
MM/DD/YY-hh:mm:ss:sss ( 0) 0 Allocated ***MB shared memory (large pages): ***MB global buffers, ***MB routine buffers
詳細については、下記の技術資料を公開しております。
Windows上でのCaché共有メモリの割り当てについて
メモリ要件の見積もりについては、以下のドキュメントをご覧ください。
メモリ要件の見積もり
あわせて、以下の関連記事も是非ご覧ください。
<STORE>エラーが発生する場合の対処法について
管理ポータルのメモリ関連設定項目について
System routine buffer (# KB) shortage is detected.... のメッセージの意味と対処方法
データベースキャッシュおよびルーチンキャッシュの最適値の設定方法
Windows上での共有メモリの割り当てについて
IRISが使用するワーキングセット(メモリ)について