2004-9-27 09:57
sosowang
关于CICS的交易Abend分析处理方法<br />当CICS交易发生Abend时,在CICS 服务器端和客户端都可以得到Abend Code。<br /> 在CICS客户端,也就是在发ecicall调用的程序的返回结构中,有Abend Code,应用编程时应该注意将此返回码保持以便出现问题时进行分析。<br /> 在CICS服务器端,可以在日志console文件中按照发生Abend的时间找到有关错误信息如ERZ014016ETransaction 'transId', Abend 'abendCode', at 'termId'。或者类似含有特征串Abend的信息,在CSMT.out文件中,按照发生问题的时间去找,也可能找到相关的信息。<br /> 在/var/cics_regions/<REGIONNAME>/<DumpName>/dir1目录下,看看是否有ASRA????.dmp01等类似文件或者cics*traceback,core*文件。注意根据发生问题的时间去判断哪个文件是发生问题是生成的。<br /> 如果没有生成dump文件,请使用这样的命令修改CICS定义(1)cicsdelete –c td –r <regionname> -R <transID>;(2)cicsupdate –c td –r <regionname> -P <transID> Permanent=no;(3)cicsupdate –c td –r <regionname> -B <transID> Permanent=yes TransDump=yes。如果这四条命令的(1)无法运行和(4)无法全部成功,则需要将region冷启动。<br /> 再次发生Abend时,会在/var/cics_regions/<REGIONNAME>/<DumpName>/dir1产生需要的交易dump文件了。<br /> 使用如cicsdfmt –r <regionmame> ASRA0001 >0001.out这样的命令来格式化dump文件,这个例子格式化ASRA0001.dmp01,输出到0001.out。<br /> 检查输出文件0001.out将会看到像下面的信息<br />**** CICS DUMP DETAILS (InfDU) ****<br /> Dump File Name = ASRA0001.dmp<br /> Dump Reason = Transaction abend occurred<br /> Date dump created = 14/04/03<br /> Time dump created = 12:26:08<br /> 然后往下翻,看到如下一段:<br />**** START OF TRANSACTION DUMP ****<br /><br /> Application Server id = 108<br /> Transaction Id = CPMI<br /> User Name = CICSUSER<br /><br />Details of function being executed: 0x7f7fd0b8<br /> Function Name = fprintf<br /> Service Level = <br /> Offset of current instruction = 0<br /><br /> Called by function = [/var/cics_regions/ABIS05/bin/?<br /> from offset = 0<br /><br /> Called by function = [/var/cics_regions/ABIS05/bin/?<br /> from offset = 0<br /><br /> Called by function = PinCA_StartC<br /> from offset = 0<br /><br /> Called by function = TasPR_CallApplication<br /> from offset = 0<br /><br /> Called by function = TasPR_RunProgram<br /> from offset = 0<br /><br /> Called by function = TasPR_IRun<br /> from offset = 0<br /><br /> Called by function = TasPR_Run<br /> from offset = 0<br /><br /> Called by function = PinCA_Route<br /> from offset = 0<br /><br /> Called by function = cics_api_exec_c<br /> from offset = 0<br /><br /> Called by function = [/var/cics_regions/ABIS05/bin/?<br /> from offset = 0<br /><br /> Called by function = PinCA_StartC<br /> from offset = 0<br /><br /> Called by function = TasPR_CallApplication<br /> from offset = 0<br /><br /> Called by function = TasPR_RunProgram<br /> from offset = 0<br /><br /> Called by function = TasPR_IRun<br /> from offset = 0<br /><br /> Called by function = TasPR_Run<br /> from offset = 0<br /><br /> Called by function = PinCA_Route<br /> from offset = 0<br /><br /> Called by function = cics_api_exec_c<br /> from offset = 0<br /><br /> Called by function = [/var/cics_regions/ABIS05/bin/?<br /> from offset = 0<br /><br /> Called by function = PinCA_StartC<br /> from offset = 0<br /><br /> Called by function = TasPR_CallApplication<br /> from offset = 0<br /><br /> Called by function = TasPR_RunProgram<br /> from offset = 0<br /><br /> Called by function = TasPR_IRun<br /> from offset = 0<br /><br /> Called by function = TasPR_Run<br /> from offset = 0<br /><br /> Called by function = PinCA_Route<br /> from offset = 0<br /><br /> Called by function = cics_api_exec_c<br /> from offset = 0<br /><br /> Called by function = [/var/cics_regions/ABIS05/bin/?<br /> from offset = 0<br /><br /> Called by function = PinCA_StartC<br /> from offset = 0<br /><br /> Called by function = TasPR_CallApplication<br /> from offset = 0<br /><br /> Called by function = TasPR_RunProgram<br /> from offset = 0<br /><br /> Called by function = TasPR_IRun<br /> from offset = 0<br /><br /> Called by function = TasPR_Run<br /> from offset = 0<br /><br /> Called by function = PinCA_Route<br /> from offset = 0<br /><br /> Called by function = ComFS_APPCServ<br /> from offset = 0<br /><br /> Called by function = TasTA_Exec<br /> from offset = 0<br /><br /> Called by function = TasTA_Run<br /> from offset = 0<br /><br /> Called by function = main<br /> from offset = 0<br /><br /> Called by function = _start<br /> from offset = 0<br /><br /><br />Abend codes: 0xc9b1afc0<br /> Latest Abend code = 0x41535241<br /> First Abend code = 0x41535241<br /><br />Abend codes (ASCII formatted during dump creation): 0x7f7fd0fc<br /> Latest Abend code = ASRA<br /> First Abend code = ASRA<br /><br />**** END OF ERROR SUPPORT DUMP (SupER) ****<br />这表明某个应用程序在运行到fprintf调用时出错了,往下查找特征串“Program full path name”,一般可以发现是哪一个程序的错误了。<br /><br /> 分析cics*tracebackup文件,也可以看到类似的程序调用堆栈信息,也就可以初步定位是发生在哪一个调用上的程序错误了。<br /> 然后,就是去修正应用程序上的错误了。<br />