对于运行慢或挂起的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…