浅谈CICS性能分析

   CICS Transaction ServerIBM主机系统的核心交易中间件,目前已经有50的历史。在50的岁月中,CICS被证明是是极为稳定高效的。套用一句经典台词,在交易处理领域,CICS一直被模仿,从未被超越

   回归正题,CICS目前在我国主要应用于银行系统,国内的大型银行和几个中小型银行每天都在使用CICS处理其核心业务,CICS的性能对于客户来说至关重要。刚刚过去2014双十一,各家银行的交易量都再创新高,CICS以其优异的表现再次通过了这次年终大考。

   在日常工作中,我有幸接触到很多主机领域的团队。很多同仁渴望了解更多CICS性能分析的知识,这也是我写这篇博客的初衷。在下面的篇幅里,我将介绍CICS主要性能指标以及CICS性能指标进行分析方法经验有限知识浅薄,希望各位看官不吝斧正。

1. 在一切开始之前

   大家可能感觉奇怪,为什么单独设置这么一个小标题与一位资深的CICS英国专家闲聊,他提了一个很值得深思的现象CICS中国实验室成立初期,他多次来中国参与客户的CICS调优安全检查。他发现很多中国工程师特别喜欢钻研但是过于钻研的结果就是因为要看到很小的一个点,却忽略了整个面对于的这次挑衅我还是比较认同的,我们经常希望把很多细节搞清楚,结果不自觉地就陷到了细节里去了,可谓不识庐山真面目,只缘身在此山中所以有的时候看问题退一步,也许反而容易发现问题的本质。

   我接触的性能问题大体可以分为两类:火烧眉毛型悠然自得型。火烧眉毛型”代表着客户出现严重的性能问题,例如核心交易响应时间很长,又或者CICS系统频繁触发MXT这种情况客户往往很焦急。“悠然自得型呢,就舒服多了,往往是客户希望定期对系统进行安全检查,或者希望对系统进行性能调优。这两种类型舒适度不同,但是性能分析的方式并没有大的差别,后面的叙述中,我将侧重于第一种情况下的处理。

   “火烧眉毛的情况,很多同仁会很快进入细节分析,想尽快找到问题的原因。我建议是进行分析之前,先问自己几个问题:

1) 系统出现的具体性能问题是什么?CPU使用增加响应时间增加?

2) 系统性能问题有没有一个模式问题发生在特定的LPAR,甚至是特定的CICS Region还是整体都出现了问题?问题发生在特定的时间点时间段,还是随机的?问题是只发生了一次,还是频繁发生?

3) 什么时候开始出现这样的问题?问题发生之前,是否发生了应用变化,软件变化(包括PTF等运维变化)或者硬件变化

   先搞清上诉几个问题将我们后面的性能分析提供一个更加明确的方向,有的放矢,才能事半功倍。

举个简单例子,一个客户系统性能出现了问题,我们首先搞清楚客户响应时间增加通过进一步了解,我们发现客户的问题发生在特定的一个LPAR,特定的一个时间段,每天都会发生,影响范围是这个LPAR的所有在线交易。到这里问题变得清晰起来,我们可以怀疑是不是这个LPAR有什么特殊的工作负载(批量应用?),在出问题的时间段,抢走了LPAR的资源(CPU内存然后影响了所有在线交易。我们了解到果然这个LPAR在这个时间段会跑一个新上线的批量作业。问题原因已经浮现出来无需去分析CICSSMFRMF等数据了。这个例子很简单,但是我相信相当一部分性能问题是可以通过这样的思考发现并解决的。即使问题依然不清楚,在我们心中对于问题以及问题可能的原因也会有更好的判断。

2. 如何获得主机系统性能数据

   确定性能问题的方向之后,收集性能数据是非常重要。主机系统及其各个组件会统一将数据写入SMFRMF数据也是记入SMF)。下面一幅主机系统性能层次图,图中将主机系统性能分为5层次。每个层次性能都依赖下面层次提供的资源。在进行性能分析的时候,脑子中有这样的层次概念是很有帮助的。



 

               图1: 主机系统的性能层次图

1) Transactions

   交易这一层次是最为直观的层次性能问题出现之后往往直观反应在交易性能上这也是为什么CICS往往是主机系统性能分析的起点。本文章后面的章节也主要集中在交易分析这个级别。

   在交易进行过程中,CICS可以记录每笔交易的性能数据记录性能的组件被称作CICS Monitoring Facility,或者CICS MonitorCICS Monitor会将交易过程中的性能数据记录到MVSSMF 110Type 1s)里,最为常见的性能数据包括交易在CICS里调度各个阶段的响应时间CICS Monitor可以通过系统启动参数进行配置,也可以CICS运行状态下通过CEMTCEMN或者CICS SPI动态打开或者关闭。更多信息,可以参考IBM Knowledge Center

http://www-01.ibm.com/support/knowledgecenter/SSGMCP_5.2.0/com.ibm.cics.ts.doc/lpaths/workload_lp_cmf.html?lang=en

   除了Monitor性能数据之外CICS还会记录统计信息,也就是CICS StatisticsCICS Statistics被记录MVSSMF 110Type 2s。如果CICS Monitor关注的是交易级别的性能数据的话,CICS Statistics关注一段时间间隔内CICS整体的系统资源使用调度情况系统资源包括交易,程序TCB,内存,DB2线程TDQ/TSQVSAM文件等。可以说CICS Statistics关注整体,是系统健康状况的总结,也常常作为系统容量评估的依据。

   CICS statistics主要分为两类,Interval statisticsEnd-of-day statistics。通CICS Monitor一样,CICS支持在运行状态下动态的设置并收集statistics更多信息,可以参考IBM Knowledge Center

http://www-01.ibm.com/support/knowledgecenter/SSGMCP_5.2.0/com.ibm.cics.ts.performance.doc/topics/dfht3_stats_intro.html?lang=en

2) TCBs/Threads

   TCBs或者Threads这一层MVS的调度单元,MVS通过预先设置好的调度优先级为TCB或者Thread分配CPU

           CICS最为重要的TCB就是QR TCB。在CICS大范围支持OTEOpen Transaction Environment)之前,大部分的应用逻辑运行在QR TCBCICSdispatcher组件进行子调度。即使CICS通过OTE支持将threadsafe的应用跑在Open TCBL8L9T8应用交易的发起和结束也需要通过QR进行处理如果遇到一些non-threadsafeAPI,应用也需要Open TCB切换QR TCB可以说QR TCBCICS的生命线,QR TCB健康状况会直接影响CICS性能

            QR值得关注的QR的两项指标是QR繁忙程度CPU使用率

   比较常见评估QR繁忙程度的方法是在CICS Statistics里面找到Accumulated Time/TCB这个时间是在CICS统计的Interval里面QR实际使用的CPU时间。然后使用这个时间除Interval时间例如下面的例子中,在CICS Statistics报告统计Interval10分钟。Dispatcher部分,我们可以看到QR TCB的统计信息。其中QR CPU实际使用时间是9:28.977897,所以这个CICS regionCPU资源很充足,但是QR繁忙程度达到95%这意味这个CICS基本饱和


   上面的例子中我们可以看到Accumulated Time/TCBAccumulated Time Dispatched非常接近,这说明MVS在调度这个QR TCB的时候保证了其CPU。但是当系统繁忙时LPAR之间,当LPAR里的地址空间之间,都会争抢有限的CPU资源进而出现CPU contention的现象。具体反映CICS里面,就是QR TCB虽然处于Dispatched状态,但是只能在一部分时间有CPU使用。我们通过QR CPU使用率来衡量CPU contention的验证程度。例如下图中,我们可以看到1分钟interval里面,Accumulated Time/TCBAccumulated Time Dispatched差别就比较大了,两者相除我们可以得到QRCPU/Disp比例也就是CPU使用率是43%

提示上面Statistics报告出自比较早期的CICS版本,里面的域名称在新版本中一定变化。具体请参考IBM Knowledge Center

http://www-01.ibm.com/support/knowledgecenter/SSGMCP_5.2.0/com.ibm.cics.ts.performance.doc/topics/dfht3_stats_disp_tcbmode_summary.html?lang=en

    Open TCBCICS被大量使用尤其是在CICS其提供的API/SPI进行大规模threadsafe改造之后,客户可用通过将threadsafe的应用更多的跑在Open TCB释放QR TCB的压力,从而提高吞吐量。Open TCBL8 TCB用来运行DB2 TRUE实现DB2的交互。CICS提供的DB2CONNDB2ENTRY定义中,提供PRIORITY选项设置Pool thread TCBEntry thread TCBQR TCB的调度优先级用户可根据实际情况进行设置。我个人的建议是优先保证QR TCBCPU,如果QR TCB CPU充足的情况,可以适当提高DB2 thread TCB的优先级,缩短DB2交互交易的响应时间。每个用户的情况不同,如何设置最好通过压力测试来论证。

3) Regions

          Regions这一层就是MVS地址空间(address space对应的层次。每个CICS Region对应一个地址空间,同样Batch, DB2MQ也都拥有自己的地址空间

   一般情况下,CICS性能分析很少需要到这个层次,除非我们发现系统的性能问题来自于地址空间本身的资源不足,例如无法保证CPU内存SoS造成地址空间资源不足往往和竞争有关,这里的竞争包括通过CICS之间的竞争,CICSBatch的竞争,CICSDB2竞争。所以系统资源紧张的时候合理的z/OS WLM设置各地址空间的调度优先级非常重要了。关于z/OS地址空间优先级的设置见仁见智,下面优先级排序仅供各位看官参考。

TCPIP VTAM IRLM All TORs and MQCHINIT (DB2MSTR, DB2DBM1, DB2DIST) MQMSTR AOR  Batch

   如果希望看到地址空间这一层次的资源调度情况,可以查看RMF包括,或者SMF Type 30记录SMF Type 30记录Region级别的统计信息。

4) LPARs

   如果我们发现当前LPAR使用的系统资源已经接近或者达到上限,这个时候竞争可能不只限于LPAR的地址空间之间的竞争, LPAR之间也存在着资源竞争现象。如果这样,我们的性能分析就进入了LPARs这个层次。z/OS通过LPAR权重为各个LPAR分配硬件资源CPU通过RMFCPU报告和Partition data报告,我们可以清楚的看到各个LPAR的资源使用情况,是否已经到达了极限,如CP Fair Share

5) HardwareNetwork

          HardwareNetwork是最后一个层次。如果性能分析锁定了这个层次用户可能需要考虑扩容了。RMF依然是分析这个层次问题的主要工具。

3. 如何理解CICS Monitor性能数据

   在上一部分,我们介绍了性能问题的层次结构以及在各个层次性能数据的记录位置。由于章节有限,在这部分我将主要针对Transaction这个层次,介绍分析CICS Monitor性能数据的方法。应该说,大部分我所接触到的性能问题都可以通过分析CICS Monitor性能数据以解决。

   若想理解CICS Monitor性能数据首先需要理解CICS是如何调度task的。Task是交易在CICS内部的实体CICS进行调度的单位。MVS级别的调度是不同的TCB分配CPU资源,CICS级别的调度则是为CICStask分配TCB资源,所以我们也管CICS的调度叫做子调度。

CICS如何TCB进行调度task

   用户的应用一般会运行在CICSQR TCBOpen TCB上。

首先介绍taskQR TCB上的调度。2显示一个taskQR TCB上运行状态。CICS的角度,task状态分为两部分,Dispatch状态Suspend状态。

          Dispatch状态始于CICS DSP动作,CICSQR调度并运行task虽然从CICS角度,Dispatch状态的task一直在使用QR TCB,但是这并意味着task可以一直拿到CPU资源来实际运行指令。Task能够拿到多少CPU取决于MVS的调度。2可以看到,硬件中断发生的时候,Dispatch状态的task也会失去CPUCICS Monitor Facility会记录这些信息在SMF里面,我在后面会更加仔细的介绍。所以进一步细分Dispatch状态可以分为运行CPU的时间和等待CPU的时间。根据经验QRCPU时间除以Dispatch时间最好大于50%70%以上代表着良好的CPU状态。

          当task需要等待某些资源包括等待CICS资源,调用系统组件进行IO,等待外部组件返回等)时,CICS 通过CICS WAITtask挂起Suspendtask进入SuspendCICSQR上面有一个task的队列,里面按照优先级排列需要CICS调度的task。在挂起当前task之后,CICS会继续调度task队列里其他的task。所以MVS来说,TCB并没有处于WAIT状态CICSSuspend机制一种逻辑上的挂起,挂起的task,而不是TCB。当被挂起的task等到了资源,CICS自动将其唤醒,并将该task按照优先级放置到task的调度队列里。所以task被唤醒之后存在一定的间隔被再次调度这段间隔的长短和QR的繁忙程度有关,而这段再次调度的等待时间也计入Suspend时间所以简单来讲,Suspend状态也可以细化为等待资源时间和等待再次被调度的时间。

            TaskOpen TCB上的调度和QR稍有不同。3L8/L9为例,显示taskOpen TCB调度过程。对比23主要区别就是CICS WAIT变成MVS WAITMVS WAIT之后的CICS DSP变成MVS DSPTask没有suspend状态。造成这一系列变化的本质原因是Open TCB同一时间段只调度一个task,也没有QR那样的task队列。task需要等待资源的时候CICS无需调用CICS WAITtask做逻辑上的挂起(Suspend),而是调用MVS WAIT所以唤醒task的方式也只能是MVS DSP总结来说Open TCB是可以容忍等待,task进入等待意味着TCB随之进入等待,这也是其QR TCBtask调度上的本质差别。如果CICS通过精细化的管理QR TCB尽可能的处于繁忙状态的话(避免MVS WAIT的发生),那么Open TCB使用则显得简单粗暴


                 图2: TaskQR TCB的调度



               图3: TaskOpen TCB调度

   讲了task不同TCB的调度,就不能不提Change ModeChange Mode指一个task在生命周期里在不同TCB mode之间的切换。前面提到所有的task的开始和介绍一定是需要在QR上运行的。task需要访问DB2MQ等外部资源管理器,或者我们希望通过使用OTE实现更大吞吐量的时候,task会在生命周期中跑到Open TCB上。不同的TCB之间进行切换,task需要一段时间等待切换的完成并被调度在目标TCB上。CICS Monitor Facility会记录task在生命周期里Change Mode次数以及总的等待时间。除了等待时间以外,因为每次TCB的切换额外消耗大概2000条的系统指令,所以应用调优的一个重要原则就是减少不必要的TCB切换。

那么CICS Monitoring的性能指标有哪些?

   在具体介绍CICS性能指标之前,我先介绍一个CICS工具,CICS Performance Analyzer,简称CICS PACICS PA是分析CICS性能的标准分析工具。用户可以利用PACICS记录SMF数据(甚至DB2CTGMQ数据)进行格式化处理抽取并分析相关性能指标,并产生性能报告。据我所知CICS PA已经是CICS客户的标配工具。了解更多CICS PA信息,请参考IBM Knowledge Center

http://www-01.ibm.com/support/knowledgecenter/SSPPU4/welcome.html?lang=en

   那么下面我们看看CICS的性能指标有哪些。图4显示CICStask的响应时间的组成部分。


                图4: CICS  task响应时间组成部分

   Task从开始到结束总的时间就是taskResponse TimeResponse time进一步可以细化为Suspend TimeDispatched Time。我前面的章节里面讲过了,QR mode存在Suspend时间但是Open TCB mode下所有的时间都是Dispatched Time

   Dispatched TimeCICS PA里对应着USRDISPT包含着所有TCB modeDispatched 时间的总和。用户可以通过PAQRDISPTL8DISPT等指标查看不同TCB mode下的具体Dispatched时间。USRDISPT里面进一步包含task时间运行CPU的时间,对应PAUSRCPUT同样USRCPUT也可以按照TCB mode进行区分。我常常QRCPUT/QRDISPT得到task运行过程期间QR使用CPU的状态。如果QRCPUT/QRDISPT比较小,说明CPU资源可能出现了争抢,QR无法获得足够的CPU。还有一种情况就是QR陷入了长于预期的MVS WAIT,丢掉了CPU资源。

Suspend TimeCICS PA里面对应着SUSPTIMESUSPTIME可以进一步细化为First Dispatch Wait (DSPDELAY) 各种资源等待的WAIT

DSPDELAYtask从开始进入CICS到被调度在TCB上的总的时间影响DSPDELAY因素包括MXTTCLASS以及CICS QR TCB上已有task(更具体说就是正在调度和优先级高的task)。

   资源等待的WAIT包括等待Journal IO的时间JCIOWTT等待TSQ IO的时间(TSIOWTT等待terminal键入时间TCIOWTT等待文件IO的时间(FCIOWTT等待TDIO时间(TDIOWTT等待MRO通信的时间(IRIOWTT等待APPC通信的时间(LU62WTT。我这里就不一一列举了。关于这些指标的具体介绍,请参照CICS PA用户说明。CICS记录的资源等待时间是同类型的等待时间加和,是累计值。

   资源等待WAIT时间里面主要包含两部分,一部分实际等待资源的时间,例如IO时间,通信返回时间等,还一部分是容易被忽略就是重新被调度在TCB上的时间DISPWTT我前面讲过QR TCB上存在task队列的,如果当前task被挂起之前在QR TCB运行,那么其等待的IO或者通信返回之后,task并不是马上可以被调度在QR TCB上,而是需要等待task队列里高优先级的task完成调度。QR繁忙的时候,DISPWTT往往是资源等待WAIT的主要组成部分。如果当前task被挂起Open TCBDISPWTT基本没有,因为Open TCB同一时间段只服务一个taskCICS记录的DISPWTT也是累加值是所有因为资源等待被挂起后等待再次被调度TCB的时间加和。

如何锁定性能瓶颈?

   前面我介绍了CICS Monitoring性能数据有哪些指标,其含义是什么。那么一旦出现了性能问题,我们应该如何入手呢?

   在文章的开始,我提到在分析问题前一定要极可能的搞清楚问题发生的背景,这包括系统出现的具体性能问题是什么?系统性能问题有没有一个模式什么时候开始出现这样的问题?如果性能问题响应时间问题,就可以通过PA有目的性的分析CICS Monitoring数据如果性能问题是CPU消耗的问题,那就需要借助类似于APA的工具找到CPU消耗的瓶颈。下面我们主要针对响应时间问题

响应时间问题的分析方法和具体问题有关,具体执行也是因人而异。建议的一个原则,从到点从粗到细。如果手头CICS Statistics不妨先了解下CICS的整体情况,然后分析CICS Monitoring数据的时候先用PA打一些总体的报告,例如针对交易的WAIT分析报告然后再去分析具体问题。有的时候通过PA可以锁定性能的瓶颈,具体的原因可能还需要借助更加细粒度的traceCICS tracesystem trace

4. 一点点结束语

   不知道读到这里各位看官是否有所收获CICS的性能分析一项复杂的任务,良好的大局观以及CICS的基本运行原理理解是这项任务的基础。如果您在CICS使用过程中遇到性能问题,不妨翻出这篇文章自己练习下。不断的实战是提升分析能力的必经之路


  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值