きどたかのブログ

いつか誰かがこのブログからトラブルを解決しますように。

Running out of ASIDs

z/OSでASIDの数が枯渇するという話です。

2年くらい前に開発環境構築後に経験したことを

今の知識で補足して書いてみようと思う。

 

ASIDの数は有限で、再利用出来るのと、再利用出来ないのがある。

WAS for z/OSを導入後、MQをBINDINGS MODEで繋ぐため、

JCLからREUSASID=YESを取り除いていた。

何度も再起動を繰り返すうちにASIDが枯渇して、

ついにはTSOユーザーのログインに支障をきたすまでに至った。

最終的に設定値の変更を反映させるためにRe-IPLが必要になった。

 

WASからMQにBINDINGS MODEで繋ぐには、

REUSASID=YESを取り除くのは必須です。

Reusable address space

これをWASにおこなうために、私は手作業で数カ所直しましたが、

updateZOSStartArgs scriptというのが提供されているので、

取り外したい時は-removeオプションを使います。 

 

Re-IPLする前に行った変更は何だったか?

自分が変更したわけではありませんが、

IEASYSxxメンバのパラメータを変更しているはずです。

関係するパラメータは3つあります。

Statements/parameters for IEASYSxx

MAXUSER

RSVNONR

RSVSTRT

念のためDIAGxxメンバのREUSASIDパラメータにも目を通しましょう。

V1R9からREUSASID=NOがデフォルトになっているので、

このパラメータが見つからない場合はREUSASID=NOになってます。

 

別の切り口になりますが、

z/OS上ではMQクライアントはBINDINGS MODEでしか接続できません。

ただしWAS for z/OSのみがCLIENT MODEも使えます。

JZOS Batch Launcherを使ったJavaアプリケーションが、

MQクライアントでBINDINGS MODEを使っていると、

そのASIDは果たしてどうなるのだろうか。

それをずいぶん前から気にしているが確認するまでに至ってなかった。

そこで今日ようやく思い立って、確認する方法を考えた。確認はしてない(笑

 

始めは何かコマンドが無いのかと探した。

結局、そういうコマンドを見つけられず、少々面倒臭いやり方を考えた。

 

ダンプから読めばいいじゃない(笑

さて、ここからアセンブラなこと言い始めます。

 

ASVTというマッピングマクロがある。

Address Space Vector Tableの略です。

これを読めば、ASIDの残数が分かると考えました。

 

z/OS V1R12.0 MVS Data Areas, Vol1 (ABEP-DCCB)等に収録されてます。

ASVTはIPCSでアドレスの代わりとして使えるようなので、

IP LIST ASVT

とやれば見れるはず。

通常は長さを指定しないといけないが、

なんか勝手に長さ測ってPOSITION(X'1E0')でリストしてくれてた。

ASVTのSTRUCTUREのフォーマットはサポートされていないので

CBFでフォーマットして見るのは無理です。ほんと面倒臭いですね。

 

見たい項目に関してIPCSコマンドをこんな感じでこさえました。

面倒臭いながらもPOSITIONを使えば少しは楽になる。

 

ASVTAAV

IP LIST ASVT ASID(X'0001') POSITION(X'+1E0') LENGTH(X'4') AREA

ASVTAST

IP LIST ASVT ASID(X'0001') POSITION(X'+1E4') LENGTH(X'4') AREA

ASVTANR

IP LIST ASVT ASID(X'0001') POSITION(X'+1E8') LENGTH(X'4') AREA

ASVTSTRT

IP LIST ASVT ASID(X'0001') POSITION(X'+1Ec') LENGTH(X'4') AREA

ASVTNONR

IP LIST ASVT ASID(X'0001') POSITION(X'+1F0') LENGTH(X'4') AREA

ASVTMAXI

IP LIST ASVT ASID(X'0001') POSITION(X'+1F4') LENGTH(X'4') AREA

ASVTMAXU

IP LIST ASVT ASID(X'0001') POSITION(X'+204') LENGTH(X'4') AREA

ASVTMDSC

IP LIST ASVT ASID(X'0001') POSITION(X'+208') LENGTH(X'4') AREA

 
上記のIPCSコマンドでのASIDは、存在するものであれば何でもOKなはず。
どのアドレス空間からでも同じオフセットになってるはず。
 
IEASYSxxのパラメータと対応させるとこんな関係になる。

・IEASYSxxのMAXUSER=ASVTMAXI

 =ORIGINAL MAX USERS COUNT AS INPUT TO IEAVNP09.

・IEASYSxxのRSVNONR=ASVTNONR

 =ORIGINAL SIZE OF NON-REUSABLE REPLACEMENT QUEUE

・IEASYSxxのRSVSTRT=ASVTSTRT

 =ORIGINAL SIZE OF START/SASI QUEUE

・ASVTMAXU = ASVTMAXI + ASVTNONR + ASVTSTRT っぽい。

 

ASVTMAXUの式は私の予想だが、以下の注意書きがIEASYSxxにあることからも

この式は妥当なのではないかと考えられる。

Note that the sum of the values specified for the RSVSTRT, RSVNONR, and MAXUSER system parameters cannot exceed 32767.

 

各々の空きについては以下の箇所で管理している模様。

ASVTAAV=NUMBER OF FREE SLOTS ON THE ASVT AVAILABLE QUEUE

ASVTAST=NUMBER OF FREE SLOTS ON THE START/SASI QUEUE

ASVTANR=NUMBER OF FREE SLOTS ON THE NON-REUSABLE REPLACEMENT QUEUE

 

 

ASVTMDSCはMAXUSER DEFICIT SLOT COUNTで、

これにはしっかりと計算式が載っている。

ASVTMDSC = ASVTMAXI - ASVTAAV - NUMBER OF ACTIVE A.S.

INCREMENTED WHEN WE TRY TO TAKE A REPLACEMENT SLOT BUT THERE AREN'T ANY. DECREMENTED WHEN NON-ZERO AND A NONREUSEABLE ASID BECOMES REUSEABLE AND WE ADD A SLOT TO THE MAXUSER POOL WHEN AN ADDRESS SPACE BECOMES REUSEABLE.     

 

つまり、ASVTANRに空きが無い状態で+1される。

ASID=0ではない再利用不可なASIDが再利用可能になった時に-1される。

ASVTMDSCはMAXUSER DEFICIT SLOT COUNTと書いてあり、

MAXUSERの負債スロット 数と直訳出来る。

まあ、MAXUSERのスロットが浸食されているということだろう。

平常時はこのカウントは0になってるようだ。

先にASVTANRの空きがなくなっていく。

 

再利用不可なASIDが再利用可能になった時という禅問答が残っているな。

それに対する答えはこれだと思う。

Reusing ASIDs

In effect, the ASID is "lost from use" for the duration of the IPL, or until all connected address spaces have terminated.

 

Re-IPLするか、Cross-Memoryで繋いでた全てのアドレス空間が終了するまで、

そのASIDは使いまわしが出来ないということのようだ。

Cross-Memoryというと、JDBCのType2接続でも同じな気がする。

MQやらDB2やらを停止しないといけないということは、

ほぼRe-IPLしているようなもの。ほんとに恐ろしい。

 

実際にMQクライアントでASIDが枯渇するのか確かめたいところだ。

 

監視という点では次のメッセージがある。

IEA059E ASID SHORTAGE HAS BEEN DETECTED

IEA060I ASID SHORTAGE HAS BEEN RELIEVED

IEA061E REPLACEMENT ASID SHORTAGE HAS BEEN DETECTED

IEA062I REPLACEMENT ASID SHORTAGE HAS BEEN RELIEVED

出来れば見たくないメッセージだけどね。