對於運行慢或掛起的CICS進程cicsas,建議使用DEBUG工具showProcInfo獲得進程的函數堆棧信息,分析進程掛起的原因。
首先使用命令 showProcInfo procid > procid.txt 獲得掛起的cicsas進程的函數堆棧信息procid.txt。對堆棧信息文件的分析主要是看主線程(Thread 1)的函數堆棧,例如附錄中的實例,在文件中找到關鍵字”Thread 1 “,其堆棧信息如下:
=== Thread 1 ===
ptrgl._ptrgl() at 0xd016ef90
raise.nsleep(??, ??) at 0xd018664c
raise.nsleep(??, ??) at 0xd018664c
sleep.sleep(??) at 0xd01e12d8
CheckPwd() at 0xd9387ce4
MUSER.main() at 0xd936d5f8
PinCA_StartC(0x2ff1d370, 0x200e335e, 0x200e3150, 0x7d00, 0x0) at 0xd23b82a4
TasPR_CallApplication() at 0xd206d404
TasPR_RunProgram(??) at 0xd206ccb4
TasPR_IRun(??, ??, ??, ??, ??, ??, ??, ??) at 0xd2067774
TasPR_Run(??) at 0xd20689a0
PinCA_Route(??) at 0xd2177988
TerEC_ServerECI() at 0xd223de4c
ComFS_APPCServ(??, ??) at 0xd223201c
TasTA_Exec(??, ??, ??, ??, ??, ??, ??, ??) at 0xd222584c
TasTA_Run(??, ??, ??, ??, ??, ??, ??) at 0xd22a2c28
conco_as.main(??, ??) at 0x10000d98
堆棧信息需要從下往上分析,即例子中的函數調用順序為:conco_as.main -> TasTA_RUN -> …-> PinCA_StartC -> MUSER.main -> CheckPwd -> sleep.sleep -> raise.nsleep -> raise.nsleep -> ptrgl._ptrgl 。
其中PinCA_StartC是CICS內部開始調用C語言程序的函數,它上面的堆棧信息是用戶的程序信息,它下面的堆棧信息是CICS內部的函數調用。我們關注的是用戶的程序信息,如本例子掛起的程序是MUSER.main,掛起的函數是CheckPwd,狀態是正在等待sleep,可根據這個調用順序協助定位程序中存在的問題。
另外,如果掛起的堆棧信息中有包含類似SQL,SQI等的函數名,則程序是掛起在數據庫中,需要去查找數據庫是否出現了鎖等待等問題;如果掛起的堆棧信息中有包含SNA的函數名,則程序是掛起在等待SNA返回信息或等待SNA發送的函數中,需要檢查SNA日誌和主機的交易情況。
附錄:showProcInfo輸出信息
#showProcInfo 26590 > 26590.txt
#cat 26590.txt
以下文章點擊率最高
Loading…