Auxiliary Storage Shortage
*IRA200E AUXILIARY STORAGE SHORTAGEの対処法

Auxiliary Storage(補助記憶装置)が不足したらどうなるか知っていますか?じつは、私も最近まで知りませんでした。“100%になったらシステムが止まるのかな?”程度に思っていたのですが、大きな間違いでした。

 

Auxiliary Storage Shortageとなった時、何が起こるのか?

は、テストプログラムを作成して、Auxiliary Storage(LocalPageデータセット)を溢れさせてみました。その時の状況をSYSLOGに表示されたメッセージを元に解説します。

まず、Auxiliary Storage Shortageとは、使用率が70%を超えた状態の事を指します。Auxiliary Storageの使用率が70%を超えると、MVSシステムMVSはIRA200Eを出力し、LOGON,MOUNT,STARTコマンドが全て失敗させ、新しいアドレススペースを作成しません。稼動中のタスクも、Swapout中のJOBはSwapinする事が出来ません。一部のJOBは強制的にSwapoutされます。さらにGetmainを要求するJOBのほとんどは停止してしまいます。

>> IRA200E, IRA204E Message :
  *IRA200E AUXILIARY STORAGE SHORTAGE
   IRA204E 07% AUXILIARY STORAGE ALLOCATED TO FASTR$T
   IRA204E 05% AUXILIARY STORAGE ALLOCATED TO MVSPAS
   IRA204E 04% AUXILIARY STORAGE ALLOCATED TO TCPS
   IRA204E 24% AUXILIARY STORAGE ALLOCATED TO BBMCAS
   IRA204E 07% AUXILIARY STORAGE ALLOCATED TO IXGLOGR

(IRA204Eは多くのAuxiliary Storageを使用している上位5タスクです。OS/390 1.2のマニュアルには、「IRA204Eに表示されたタスクは強制的にSwapoutされる」とありますが、OS/390 1.3では「・・・Swap可能なタスク・・」と変更されています。これはMVSの仕様が変わった訳では無く、マニュアルが訂正された様です。OS/390 1.2であってもNo-SwapのタスクはSwapoutされませんでした。)
>> Aux不足によるLOGONコマンドの失敗例

   LOGON
   IEA602I ADDRESS SPACE CREATE FAILED.  A STORAGE SHORTAGE EXISTS
   IEE328I LOGON    COMMAND ABORTED

(このメッセージはConsoleに出力されます。TSO画面にはIEA602Iのみ表示されます。)

>> Aux不足によるSTARTコマンドの失敗例

   S ASTRTST
   IEA602I ADDRESS SPACE CREATE FAILED.  A STORAGE SHORTAGE EXISTS
   IEE328I S        COMMAND ABORTED

この様にAuxiliary Storageの使用率が70%を超えた段階で正常に稼動できるタスクは、70%となる以前に起動していたNOSWAP属性のタスク、又は新たにGetmainせず、少量の仮想記憶で動いているタスクだけとなっています。
これほど危険性を含んでいるにも関わらず、MVSは事前に警告メッセージを出す事はありません。70%を超えて、始めてメッセージを出力します。

さらにLocalPageデータセットの使用率が85%を超えた時、MVSはIRA201Eを出力します。このメッセージはかなり重症であり、長時間続く場合、システムは崩壊する様です。
>> IRA201E Message :

  *IRA201E CRITICAL AUXILIARY STORAGE SHORTAGE

IRA201Eが表示された後、以下の様な事が発生しました。

   IEF196I IOS079I 0563,**,XCFAS, I/O TIMEOUT INTERVAL HAS BEEN EXCEEDED
   IEF196I         FOR A QUEUED REQUEST. THE QUEUED REQUEST HAS BEEN
   IEF196I TERMINATED.
   IOS079I 0563,**,XCFAS, I/O TIMEOUT INTERVAL HAS BEEN EXCEEDED 025
           FOR A QUEUED REQUEST. THE QUEUED REQUEST HAS BEEN TERMINATED.

ストレージ不足の為、I/O処理が停止したと思われます。

  *IXC246E SYSPLEX COUPLE DATA SET 045
   SYS1.XCF.CDS01 ON VOLSER SYS9P3,
   DEVN 0563, HAS BEEN EXPERIENCING I/O DELAYS FOR  60 SECONDS.

このメッセージは更に深刻です。Sysplex Couple Datasetにアクセス出来なくなった様です。このまま放置しておくと、MVSはAlternate Sysplex Couple Datasetにアクセスを試みますが、当然そちらも失敗するでしょう。2つのSysplex Couple DatasetにアクセスできなくなるとMVSはシステムを強制終了します。
この様に、Auxiliary Storageの使用率が85%を超えたまま放置すると、システムは崩壊しダウンしてしまうでしょう。
ちなみにAuxiliary Storageの使用率が85%を超える迄に要した時間は、テストJOBを実行してから十数分間でした。

 

Auxiliary Storageの使用状況

以下のコマンドにより現在の使用状況を確認する事ができます。

 > D ASM
  IEE200I hh:mm:ss DISPLAY ASM nnn
  TYPE      FULL  STAT   DEV  DATASET NAME
  PLPA       63%    OK  0563  SYS1.PAGELPA
  COMMON      7%    OK  0563  SYS1.PAGECSA
  LOCAL      70%    OK  0563  SYS1.PAGEL1
  LOCAL      70%    OK  0563  SYS1.PAGEL2
  SWAP        2%    OK  0563  SYS1.SWAP

“LOCAL”がAuxiliary Storageであり、複数ある場合は、その合計が使用率となります。(Page Datasetはレスポンスの速いDASDを優先的に使用する様な設計となっています。その為装置タイプの違う2つ以上のDASDを使用すると使用率に偏りができる可能性があります。)

 

Auxiliary Storage Shortageの回復

通常の回復手順としては、多量のストレージを消費しているタスクを停止するか、もしくはLocalPageデータセットを新たに追加します。

 

多量のストレージを消費しているタスクを停止する

素早く回復するには「多量のストレージを消費しているタスクを停止する」事が良いのですが、多量のストレージを消費しているタスクを調べるコマンドは無い様です。IRA204Eで上位5タスクを調べる事が出来ますが、おそらくこれらのタスクは簡単に停止する事が出来ないものだと思われます。(システムアドレス空間やDBなどが表示される可能性が高い)
RMF等ならばストレージサイズを調べることは可能ですが、Auxiliary Storage Shortageの状態でRMFを呼び出す事は出来ないでしょう。
つまり、経験から、又は単なる“感”に頼って止めるタスクを決定するしか無いでしょう。(JOBが終了すれば、JOBLOG、又はSMFから、使用したストレージサイズを調べる事ができます)
終了は、STOPコマンドなどで止める事ができれば良いのですが、可能であればCANCELします。(使用率がかなり高い状態であっても、CANCELコマンドを発行する事は可能でした)

 

LocalPageデータセットを追加する

LocalPageデータセットを追加する方法は最も確実な方法ですが、作成には数分〜十数分の時間が必要となります。
マニュアルでは「事前にデータセットを作成しておき、Auxiliary Storage Shortageとなった時に追加しなさい」と書いてありますが、事前に作成しておくぐらいなら、IPL時から接続(増設)しておいた方が良いのでは?と疑問になります。(常時接続するとレスポンスの悪化を招く様な低速のDASDに小さいサイズで作成しておき、本当の緊急時のみ追加するという事でしょうか?)とにかく私のSystemでは事前に作成する様な事は行っていません。始めから十分を思われる容量のLocalPageデータセットを接続しています。(通常の使用率は10%以下です)

1

LocalPageデータセットの作成

LocalPageデータセットは'SYS1.PARMLIB(IEASYSxx)'のPAGTOTLパラメータに指定した数だけ追加できます。この値はある程度余裕のある数字を指定した方が良いでしょう。
未使用のVOLUMEを探しLocalPageデータセットを作成するDASDを用意します。このDASDは出来る限り未使用(他のタスクから使用されていない)で高速なDASDが望ましいと思われます。
以下の様なJCLを用意し、必要個所を修正します。このJOBは5〜10分必要となり、Swapout状態でデータセットのフォーマットを行います。(これは緊急用なので、容量についてはなるべく大きな値を指定した方が良いでしょう。しかし当然大きくなればなるほどフォーマットの時間が必要となります)

  //jobname  JOB CLASS=x,MSGCLASS=x,NOTIFY=userid
  //PAGECRE EXEC PGM=IDCAMS
  //STEPCAT  DD DSN=master.catalog,
  //            DISP=SHR
  //SYSPRINT DD SYSOUT=*
  //PAGELOC  DD UNIT=3390,VOL=SER=serial,DISP=OLD
  //SYSIN    DD *
    DEFINE PAGESPACE(  -
        FILE(PAGELOC) -
        NAME(locapage.dsname) -
        CYLINDERS(1000) -
        VOLUME(serial) ) -
        CATALOG(master.catalog)
2

LocalPageデータセットの接続

以下のコマンドにより作成したLocalPageデータセットを追加します。

> PA PAGE=locapage.dsname
          (作成したPageデータセット名)
IEE783I PAGEADD COMMAND- nnn
locapage.dsname PAGE DATA SET
NOW AVAILABLE FOR SYSTEM USE

以下のコマンドにより接続状況を確認する事ができます。

> D ASM
IEE200I hh:mm:ss DISPLAY ASM nnn
TYPE      FULL  STAT   DEV  DATASET NAME
PLPA       63%    OK  0563  SYS1.PAGELPA
COMMON      7%    OK  0563  SYS1.PAGECSA
LOCAL      69%    OK  0563  SYS1.PAGEL1
LOCAL      69%    OK  0563  SYS1.PAGEL2
LOCAL       2%    OK  0501  locapage.dsname
SWAP        2%    OK  0563  SYS1.SWAP
 

Auxiliary Storage Shortageを事前に防ぐ方法

今のところ、Auxiliary Storage Shortageを完全に防ぐ方法は無いと思います。しかし考えられる案としては

  1.VIO を止める
  2.ある程度使用率が高くなったら警告をあげる
  3.1つのJOBで使用できるREGION SIZEを制限する

といった方法である程度事前に防ぐことができます。

1

VIOを止める

VIO は古い機能で“ファイルを仮想記憶上に書く”という斬新なアイデアでしたが、今となってはそれほど素晴らしい機能とは思いません。どちらかというとシステム全体にインパクトを与えやすく、「VIO を使用した JOB は速くなるが、システム全体が記憶域不足で遅延する」という悪循環を招くと思われます。さらに最近の DASD は巨大なキャッシュを搭載しているので、普通に DASD 上にファイルを書き込んでも VIO と同程度の性能を出してしまうかもしれません。
VIO を止めるのは簡単で、HCD(MVSCP) の VIO=YES を外して、Work Diskなどのアドレスを指定しておけば良いだけです。

2

ある程度使用率が高くなったら警告をあげる

これは保守的な方法ですが、比較的簡単に実施でき、さらに他の JOB に与えるインパクトもほとんど無いでしょう。Netviewなどを使用してもいいし、@cmdを使った簡単なREXXプログラム起動用のプロシジャーを作成し、JES2の自動コマンドで
> $TA AC,I=600,'$VS,''S AUXCHK'''
という感じで設定すれば、一定以上の使用率となった時、あなたのUSER-ID宛てにメッセージを送る事ができるでしょう。

3

1つのJOBで使用できるREGION SIZEを制限する

1つの JOB で使用できる Region Size を制限すれば、プログラムのバグ・ループなどで無限に繰り返される Getmain 要求から、システムを守る事ができます。










Home | Tips

1998.09.20 - 1998.09.23:OS/390-1.2 - Kimu -