在 z/OS CICS 中,执行 EMP 的 COBOL 程序能否检索在 TASK 期间执行的 EMP 的结果?

Posted

技术标签:

【中文标题】在 z/OS CICS 中,执行 EMP 的 COBOL 程序能否检索在 TASK 期间执行的 EMP 的结果?【英文标题】:In z/OS CICS, can the result of an EMP executed during a TASK be retrieved by the COBOL program that executed the EMP? 【发布时间】:2020-04-04 16:27:55 【问题描述】:

在 z/OS 中,我可以在 CICS MCT(监控控制表)中定义一个用户 EMP(事件监控点)。例如,一个 EMP 可以启动 CPU 时钟/定时器,而另一个 EMP 可以停止 CPU 时钟。然后,我可以在运行程序的 TASK 期间从我的 COBOL 程序中“执行”每个 EMP。执行 EMP "no.1" 将启动时钟,执行 EMP "no.2" 将停止时钟。

我知道 CPU 时钟的最终值将保存为 SMF 110 记录的一部分,该记录是在 TASK 完成后写入的。

我的问题是,可以在 TASK 仍在执行的同时在 COBOL 程序中检索 CPU 时钟的当前值吗?

如果是这样,哪个 CICS 语句会这样做?时钟将被检索到哪个结构/布局和字段中?

我想知道的原因是因为我想测量程序执行某个进程所需的 CPU 时间。同一进程可能在一个 TASK 中执行多次,我想使用相同的 CPU 时钟来测量每次执行该进程的时间。

非常感谢,

丹尼

【问题讨论】:

【参考方案1】:

EXEC CICS COLLECT STATISTICS MONITOR(EIBTASKN) SET (ADDRESS OF DFHMNTDS) 可用于检索正在运行的任务监控字段 - 正如 Danny 在下面的评论中指出的那样。

带有 PERFORM=DELIVER 的 DFHMCT TYPE=EMP 宏可能适合您的目的。它导致为此任务累积的性能类数据传递到监视缓冲区。请参阅 CICS 文档: https://www.ibm.com/support/knowledgecenter/SSGMCP_5.5.0/reference/resources/macros/mct/emp.html

如果您使用的是 CICS TS V5.4 或更高版本,您可能会考虑将重复运行的进程分离到一个事务中。然后使用“EXEC CICS RUN TRANSID CHILD”从当前 COBOL 程序/任务启动事务,这将作为子任务启动进程,并为其测量 CPU。您可以使用“EXEC CICS FETCH CHILD”从子任务中获取响应。

这两个API的使用详情请看CICS开发者中心的文章:https://developer.ibm.com/cics/category/asynchronous-api/

感谢和亲切的问候, Jenny(CICS 开发,IBM Hursley 实验室)

【讨论】:

嗨,珍妮,感谢您的详细回复。我们的商店在 CICS 5.3 上。当您说 DELIVER 导致数据“交付到监控缓冲区”时,这实际上是什么意思?通过分析由 TASK 创建的 SMF 记录,COBOL 程序能否在 TASK 仍在运行或仅脱机时访问数据?我目前使用以下命令。你能对此发表评论吗? EXEC CICS 执行统计记录监控 RESP (EZ10-RC-CICS) RESP2 (EZ10-RC2-CICS) END-EXEC (对不起,我之前的评论被删了)……我目前使用以下命令。你能对此发表评论吗? EXEC CICS PERFORM STATISTICS RECORD MONITOR RESP (EZ10-RC-CICS) RESP2 (EZ10-RC2-CICS) END-EXEC EXEC CICS 收集统计数据集(DFHMNTDS 的地址) MONITOR(EIBTASKN) RESP (EZ10-RC-CICS) RESP2 (EZ10 -RC2-CICS) END-EXEC 执行完这些命令后,在 COBOL 程序中执行,而 TASK 仍在进行中,我可以访问 DFHMNTDS 字段中的当前值。特别是“当前任务 CPU 时间”。谢谢,丹尼 嗨 Danny,EXEC CICS PERFORM STATISTICS RECORD MONITOR 使 CICS 为 CICS 区域的监视功能的全局统计信息写出统计记录。在我看来,这与您所追求的任务 CPU 时间无关。 EXEC CICS COLLECT STATISTICS SET(ADDRESS OF DFHMNTDS) MONITOR(EIBTASKN) 将用于检索由 DFHMNTDS 映射的正在运行的任务的监控字段。 “交付到监控缓冲区”意味着记录在 CICS 中缓冲,一旦缓冲区累积了足够的记录,CICS 会将它们写出到 SMF。 CICS v5.3 有一个任务策略规则时间,它的 CPU 时间子类型可用于定义用户任务使用的处理器时间量的阈值。取决于您的目标,这可能会让您感兴趣。使用这种方法,无需更改 COBOL 程序,也无需打开监控。详情请见:ibm.com/support/knowledgecenter/SSGMCP_5.3.0/…

以上是关于在 z/OS CICS 中,执行 EMP 的 COBOL 程序能否检索在 TASK 期间执行的 EMP 的结果?的主要内容,如果未能解决你的问题,请参考以下文章

Z/OS 中 COBOL 嵌套程序与子程序有啥区别

从 z/OS 批处理作业运行 XA/JTA 事务

CICS中的Node.js:入门问答

MQ EOL 数据转换

CICS 返回 VS GOBACK

在 CICS 中浏览 KSDS 时无法读取下一条记录