InterSystems製品のプロセスが消費するメモリは以下のとおりです。
プロセスのプライベートな領域
このようにプロセスが使用するメモリ領域は、プライベート領域と共有領域の大きく2種類に分かれます。
プロセスのプライベートな領域はそのプロセスのみが使用し、個々のプロセス毎にメモリを割当てます。
共有領域については、プロセス間で一つのメモリ領域を共有してアクセスしていますので実体はメモリ上に 1つです。
以下それぞれの領域の値は、管理ポータル(またはシステム管理ポータル)、構成マネージャー(5.0以前)で指定します。
※ 以降の説明では、2010.2 以前のバージョンで使用していた「システム管理ポータル」の名称を「管理ポータル」として記述します。
【2012.2~】 [システム管理] > [構成 > [システム構成] > [メモリと開始設定] > [プロセスあたりの最大メモリ(KB)]
【2011.1~2012.1】 [システム管理] > [構成] > [追加の設定] > [メモリ詳細] > [bbsiz]
【2009.1~2010.2】 [構成] > [メモリ詳細設定] > [bbsiz]
【5.1~2008.x】 [構成] > [詳細設定] > [カテゴリ]:Memory > [MaxMemPerProcess]
このプロセスパーティションサイズは初期値は 128KBytes になっており、プロセスがこの領域を使用すると自動的に拡張します。
管理ポータルでの設定は、このパーティションが拡張できる最大値を設定しています。
プロセスで実際に長い文字列が使用されると、文字列用のメモリを、そのプロセス用のパーティションメモリ領域から割り当てるのではなく、オペレーティングシステムで malloc() により割り当てられます。
上限はありません(仮想メモリ[=物理メモリ+ページファイル]から確保可能な上限まで)。
文字列が破棄されると、長い文字列用に取得したメモリを解放します。
※以下ドキュメントをご参照ください
長い文字列について
LongString有効の時のみ。
LongStringを有効にした場合、長い文字列の処理に対応するために、文字列スタックのサイズを約 50 倍に増やします。
(これは、プロセスで長い文字列を使用するかどうかにかかわらず、各プロセスに割り当てられるメモリの量です)
【2011.1~】 [システム管理] > [構成] > [システム構成] > [メモリと開始設定]
【5.1~2010.2】 [構成] > [メモリと開始設定]
【2011.1~】 [システム管理] > [構成] > [システム構成] > [メモリと開始設定]
【5.1~2010.2】 [構成] > [メモリと開始設定]
【2011.1~】 [システム管理] > [構成] > [追加の設定] > [メモリ詳細] > [gmheap]
【2009.1~2010.2】 [構成] > [メモリ詳細設定] > [gmheap]
【5.1~2008.x】 [構成] > [詳細設定] > [カテゴリ]:Memory > [GeneralHeapSize]
以上の要素でプロセスが使用するメモリサイズが決まり、1つのプロセスでの最大使用メモリはおおよそ上記6つの値の合計値になります。
また、全プロセスで使用するメモリサイズは以下のとおりです。
(((1)プロセスパーティション + (3)文字列スタック) × プロセス数) + (2) 長い文字列使用メモリ(全プロセス合計※) + (4) データベースキャッシュ + (5) ルーチンキャッシュ + (6) 一般ヒープメモリ
※長い文字列使用メモリとして実際にどの位のメモリ総サイズが必要になるかは、アプリケーション単位で算出する必要があります。