きどたかのブログ

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

WASzにおけるSTOKENについて

WebSphere Application Server for z/OSを使っていると、
STOKENという言葉に出くわす人がいると思う。


STOKENはSpace Tokenの略だと思われる。


Address SpaceやData Space毎に持ってるTokenということだ。


ASCRE macroのOutput ParameterにODAというのがある。(Output Data Address)
ASCREはAddress Spaceを作成するマクロだ。
ODAに格納されてくるのはASEOという構造体で、IHAASEO macroで作成される。
ASEOのASEOSTKNという項目にSTOKENが入っている。
また、ASEOにはASEOASCBという項目があり、これはASCBのアドレスが格納されている。


ASCB(Address Space Control Block)の中を見てもSTOKENがいなくて迷ったが、どうやらそういうことだったらしい。
じゃあ、ASEOは、Address Spaceを作成したTaskが管理してるってことかな。
ASDES macroというAddress Spaceを終了させるマクロは、STOKENが必須パラメータになっている。
そうなるとCANCELコマンドは全く別のメカニズムだと考えた方がいいのかな。


STOKENはIPLしない限りは一意ということになっている。
Using the ASCRE Macro to Create an Address Space
http://publib.boulder.ibm.com/infocenter/zos/v1r12/topic/com.ibm.zos.r12.ieaa500/iea2a570114.htm?resultof=%22%41%53%45%4f%22%20%22%61%73%65%6f%22%20


wsadminでstokenが必要になるものを少し挙げてみよう


type=JVMのMBean
generateSystemDump(stoken)
generateHeapDump(stoken)
STOKENを知らない人は、CRと全SRのSystemDump/HeapDumpを生成してしまう。
MODIFYコマンドではどうだろうか。
"MODIFY ,HEAPDUMP"はSTOKENを受け付けないので、CRと全SRのHeapDumpを出力する。
"MODIFY ,JAVATDUMP"はCRのは出ないはず?だが、全SRが対象になっている。
ピンポイントで証跡を取りたいならSTOKENを知らねばならない。
複数SRの構成であると、コマンドを叩いた途端に容量不足でエラーが出る可能性がある。
(WASzに詳しくない人がディスクを見積もってたら、そうなるのが必然だ。)
動いてるサーバーにただちに影響を与えるようなエラーではないのだが、
HeapDumpの場合は、出力先の優先順位があって、最終的には/tmpを使うことになる。
もしもそんなところにダンプが放置されたならば・・・、
他の製品が/tmpを使っていたら迷惑をかけるだろうし、
java.io.FileのcreateTempFileだとかもデフォルトなら/tmp使うだろうから、
ファイルを作れなく可能性なんかも出てくる。
TDUMPの場合は、実行ユーザーがHLQに使われるので、その当たりを使ってVOLUMEを分けれていればOK.


type=ControlAdminServiceのMBean
startupAdjunctJVM(stoken)
startupServantJVM(stoken)
cleanupAdjunctJVM(stoken)
cleanupServantJVM(stoken)
ふつう使うことはないけど。


wsadminからSTOKENを見ることは出来るが、どちらのServantかの区別が付けられない。
type=JVMのMBeanで、
print AdminControl.getAttribute(jvm,'heapSize')
もしくは
print AdminControl.getAttribute(jvm,'freeMemory')
などと打つとSTOKENを見ることが出来る。
面白いことに'maxMemory'はCRのしか出ない。オイオイ。


STOKENは起動後のJOBLOGをDRSで検索したら見つかる。
CWWDR0042I: Servant {0} has completed DRS initialization successfully.
公式には説明はないが、{0}に入るのがSTOKEN。
ちなみに、CRのJOBLOGでもこのメッセージです。(Servant {0}...}
また、このSTOKENはFFDCのファイル名にも含まれている。
STC名の次の項目がそれだ。


WAS上のプログラムでServantのSTOKENを取得することは可能。
com.ibm.websphere.runtime.ServerNameというクラスを使う。