プロセス領域の管理
プロセスは、上記のエンティティにために使用するメモリの初期プールで始まります。アプリケーションは、これらのエンティティを作成するときに上記プールからメモリを消費します。アプリケーションがこれらのエンティティを削除するとき、そのメモリはプールに返されます。例えば、ルーチンが実行を開始すると、ほとんどの場合一部のメモリを消費するローカル変数を作成します。ルーチンが戻り、これらの変数が範囲外になると、これらの変数によって使用されているメモリは返され、再使用できるようになります。
アプリケーションがメモリを必要としていて、要求を満たすために使用できる十分に大きい (連続した) メモリ領域がプロセスのプールにない場合、プロセスは、基礎となるオペレーティング・システムからの追加のメモリのまとまりを要求し、プールに追加します。その後、そのメモリのまとまりがまったく使用されなくなると、オペレーティング・システムに返されます。エンティティがメモリに割り当てられる順序とそれらのエンティティがメモリから削除される順序は相互にミラー・イメージではない場合があるため、実行が進行するにつれて、メモリはある程度断片化されます。これは、上記のオペレーティング・システムからのメモリの割り当ておよび割り当て解除に影響する可能性があります。
$ZSTORAGE
InterSystems IRIS プロセスは、最大で 2TB のメモリを使用します。メモリ使用量の管理を支援するために、InterSystems IRIS は、メモリ消費の制限値をより小さく設定する方法を管理者またはアプリケーションに提供します。この値は各プロセスのシステム変数 $ZSTORAGE に格納されるため、$ZSTORAGE には常にプロセス・メモリの最大許容サイズ (KB 単位) が格納されます。
$ZSTORAGE の値は、1KB 単位で指定されます。最小許容値は 256、つまり、256KB です。プロセスが $ZSTORAGE に設定できる最大値は、メモリの 2TB (231 * 1KB) です。値を、最小よりも小さく、または最大よりも大きくすると、それぞれ、最小または最大の既定値になります。
プロセスあたりの最大メモリ。
この値は管理ポータルで設定します。関連ページにアクセスするには、[システム管理]→[構成]→[システム構成]→[メモリと開始設定] を選択します。表示されるページで、[プロセス当たりの最大メモリ (KB)] に値を設定します。
構成ファイル (iris.cpf) で、このパラメータは bbsiz と呼ばれます。この値が、プロセス開始時の $ZSTORAGE の初期値です。
Note:
プロセスのメモリ制限は、プロセスを ObjectScript の JOB コマンドで開始するときにも設定できます。
$STORAGE
システム変数 $STORAGE は、実行中プロセスで使用可能なストレージの量を表します。これはバイト単位で示されます。プロセスのメモリ要求が $STORAGE の値よりも大きい場合、またはオペレーティング・システムからのメモリ割り当て要求が失敗した場合、<STORE> エラーが発生します。
<STORE> エラー
メモリに関するプロセスの要求を満たすと $STORAGE の値が負の値になる場合、またはオペレーティング・システムからのメモリ割り当て要求が失敗した場合、<STORE> エラーが発生します。$STORAGE が負の値になるときの <STORE> エラーの処理に関して、InterSystems IRIS プロセスは 2 つのモード (通常モードと低メモリ・モード) の 1 つになっていると考えられます。
-
通常モード
プロセスが通常モードで、メモリの要求を行わないと $STORAGE が負の値になるような要求を行うと、このプロセスは <STORE> エラーをスローし、低メモリ・モードになります。
-
低メモリ・モード
低メモリ・モードでは、$STORAGE を負の値にする操作が許可されます。これは、追加のメモリを許可し、アプリケーションがエラーを処理してクリーンアップできるようにするためです。$STORAGE の値を 256KB 以上 (またはこれより小さい場合は $ZSTORAGE の 25%) に増やせるように低メモリ・モードのプロセスがメモリを解放すると、プロセスは通常モードに戻ります。低メモリ・モードでは、約 1 MB の下限が $STORAGE に設定されます。操作をしないと $STORAGE がこの制限を下回ってしまうような操作を行うと <STORE> エラーになります。下限の値は、低メモリ・モードになると $STORAGE の値マイナス 1 MB で定義されます。
Note:
プロセスは、$ZSTORAGE を許容範囲の任意の値に設定できます。$ZSTORAGE が現在使用中の値よりも小さい値に設定されると、$STORAGE は負の値になります。プロセスが通常モードのときにこれが発生した場合、次にメモリを割り当てる操作を行うと、プロセスで <STORE> エラーが発生し、低メモリ・モードになり、下限値がその値マイナス 1 MB になります。プロセスが既に低メモリ・モードになっているときにこれが発生すると、下限値は変更されないままです。
-1 MB の低メモリ・モード制限を超えた結果発生した <STORE> エラーまたはオペレーティング・システムからのメモリの割り当てに失敗した結果発生した STORE エラーの場合、使用できるメモリが非常に少ないため、プロセスの動作は予想できません。プロセスによってエラーを通常どおりに処理できる場合、エラー・ハンドラで <STORE> エラーが発生する場合、またはエラー・ハンドラを呼び出せず、プロセスが停止する場合があります。
エラー・ハンドラは、以下の方法の 1 つまたは複数を使用して <STORE> エラーを処理できます。
-
メモリ要求を引き起こした演算処理を中止し、<STORE> エラーが発生するまでに演算処理によって取得されたストレージがある場合、これを解放します。
-
不必要なデータを除去することによって、利用可能なより多くのメモリを生成しようとします。
-
開いているファイルを閉じるなど必要なクリーンアップを実行し、プログラムを終了します。
-
今後のプロセスの続行およびより多くのメモリの要求を可能にする大きい値に $ZSTORAGE の値を設定します。
特別な考慮事項