IBM Support

如何使用性能探测器的*STATS 和*PROFILE/PGM功能

Technical Blog Post


Abstract

如何使用性能探测器的*STATS 和*PROFILE/PGM功能

Body

性能探测器(PEX) 是IBM i 操作系统上的一个性能分析工具,它可以帮助性能分析人员或者程序员定位性能问题。 这些性能问题包括在生产环境上较差的响应时间和吞吐量或者正在开发的有性能问题的程序。不管哪种情况,PEX都会利用先进的采样和跟踪功能来收集其他工具收集不到的数据。通常这些采样和跟踪数据在收集的时候对系统的性能影响很小。从而实现在数据收集的时候不影响生产系统。


PEX能收集四种基本的集合类型:
 1.*STATS = 统计集合类型。 为程序和过程提供调用/返回的统计数据,比如程序或者过程被调用了多少次,程序或者过程做了多少次调用和使用了多少CPU时间和磁盘输入/输出。它的开销(对系统性能的影响)是有限且平稳的,但是收集到的数据相对较小。程序必须用下列方法打开这种集合类型:
     • 对于OPM (老的程序模型,或者非ILE)程序,它总是打开的
     • 对于ILE程序,主程序入口点是打开的。
     • 对于ILE程序,如果优化级别在30或者30以下,或者ENBPFRCOL参数设置为*ENTRYEXIT或者*FULL,那么这些单个的过程也是打开的。
    • 对于优化级别在40的ILE程序过程,如果CHGPGM的LICOPT设置为CallTracingAtHighOpt,并且过程(非叶子过程)被调用时在调用栈上有一帧堆栈,  这些过程的这个选项就是打开的。
2.*PROFILE/*PGM = 程序概要集合类型。 提供用来判定一个特定的程序里面CPU的热点发生在指令级别的什么地方。不需要特殊的设置。这个开销是中等的,但是收集到的数据相对来讲比较小。

3.*PROFILE/*JOB = 作业概要集合类型。这个集合类型历史上曾被称作TPROF,因为它其实是个跟踪日志,可以用来作为一个概要集合分析。它和一个程序的概要相似,但是可以用来作为一个作业,作业集或者整个系统用到的所有程序的概要,特别是如果优化级别很高的ILE代码被大量的使用(这样会使*STATS模式无效)。所有的IBM i 操作系统,包括XPF,LIC和所有的正在使用的IBM产品都会包含在这个概要里面。不需要特别的设置。开销也比较低,但是数据集合可能会很大,这取决于指定的采样频率和集合的长度。

4.*TRACE = 跟踪日志集合类型。它提供了一个跟踪日志机制来记录各种各样的事件。比如,程序和过程的调用/返回,Java对象的创建/销毁,磁盘读/写,存储段创建/扩展/销毁,堆分配/回收,任务切换进/出,等等。除了一些发生很快的事件(几秒钟数以百万计),总的来说,开销还是比较低的。如果事件发生的很快或者跟踪日志运行了很长时间,跟踪日志数据可能会很大。

作为一系列介绍PEX的第一篇文章,本文主要关注*STATS和*PROFILE集合类型,未来后续的文章会涵盖其他类型的集合类型。

使用PEX


在使用PEX之前,首先需要做的一件重要的事就是确定正确的类别,以准确地了解哪种集合类型是需要的(如果有的话)。在某些时候,一个比较小的*STATS或者*PROFILE的跟踪日志就可以得到需要的信息,那么收集上GB的跟踪日志数据是没有意义的。
     • WRKACTJOB命令 – 显示哪个作业正在使用很多的CPU时间或者产生很多的磁盘活动。
     • WRKSYSSTS命令- 显示哪个磁盘池有很多的页面故障,这说明内存不够或者应用程序行为异常。
     • WRKSYSSTS命令 – 显示哪些磁盘过于繁忙。它也能显示是否磁盘由于硬件的问题而导致性能下降。
     • WRKSYSACT命令 – 和WRKACTJOB比较相似,但是也能显示系统任务和wait bucket信息,这些信息可以告诉你这个作业在哪儿消耗了时间。这个命令是性能工具产品(5722PT1)的一部分。
     • iDoctor作业观察器 – 这个iDoctor的插件可以显示作业和任务的详细信息,它和WRKSYSACT相似但是功能更多。最好用WRKSYSACT类固醇描述它。

 一旦你确定了可能是什么原因导致了问题,你就可以创建一个收集必要数据的PEX定义。然后可以启动一个指定了该定义的PEX收集任务。当你确定收集的数据足够时,你就可以结束这个收集任务,它会把数据存储在数据库文件集中,可以用PRTPEXRPT命令来查询和打印数据,或者用iDoctor PEX分析器(一个分析PEX跟踪日志数据的插件)来分析数据,PTDV也是可以分析PEX跟踪日志数据的另外一个工具。
 
收集和分析PEX数据的基本步骤:
1. ADDPEXDFN 命令 – 这个命令可以用来添加指定了收集什么类型的数据和要采样和跟踪什么样的作业的PEX定义。
2. STRPEX命令– 该命令可以用来启动一个PEX数据收集任务。
3. ENDPEX命令– 该命令可以结束一个PEX收集任务并保存数据。如果需要,一个收集任务可以用ENDPEX命令被暂时挂起,然后用STRPEX命令重新启动。
4. PRTPEXRPT命令 – 该命令可以打印一个PEX报表。对于*STATS和*PROFILE类型的数据,这个打印的数据报表是很有用的。对于*TRACE类型的数据,如果多于几千个时间发生的话,这个报表可能很长并且没有用处,所以用其他工具来总结数据是必须的。 这些工具包括iDoctors PEX分析器和PTDV。


使用 *STATS 参数分析处理器和磁盘性能

如果你遇到一个处理器性能问题(比如:处理器使用率很高或是单一作业使用了过多的处理器资源)。
*Stats 参数收集某个程序或复杂机器接口指令的处理器和磁盘资源使用情况。使用这个参数还可以收集某个程序或机器接口指令调用的时长。使用下面的命令创建一个定义调用*STATS参数。
ADDPEXDFN DFN(STATS) TYPE(*STATS)   JOB(*ALL)
 如果系统频繁调用ILE程序且优化级别是30或更低,那么在数据中查看某个程序的情况,需要指定下列参数。
PGMBKTEVT(*MISTREND *PRC)
 这个定义将收集系统中所有作业的抽样数据,程序每执行一次返回,PEX就会收集一个抽样数据。这个定义允许收集很长时间内系统所有的活动情况(最长可收集数日)。数据的大小取决于作业、程序采样的数量而不是程度被调用的次数。
 使用下面的命令,调用一个定义来启动数据收集,数据收集会话名称是STATS, 调用的定义名称是 STATS
STRPEX SSN(STATS)  DFN(STATS)
 现在只需要等待,等待收集了足够的采样数据。下面是停止收集并保存数据的命令。
ENDPEX SSN(STATS)
 如果你不想把数据存在默认的库(QPEXDATA)中,也可以指定一个库,命令如下。所有的数据都会存在数据库文件成员中,这个成员的名字与会话的名字相同。
PRTPEXRPT MBR(STATS) LIB(QPEXDATA) TYPE(*STATS)
 使用上面的命令,显示Stats数据成员. 报告中,标题为“统计信息”的这部分会列出程序和复杂机器接口指令的信息。

在这个报告中,你可以看到各种关于程序和复杂机器接口指令抽样数据的统计信息, 包括QWCCDSAC(列表中的第一项)以及复杂机器接口指令数据如 *FNDINXEN(列表中第三项)。复杂机器接口指令数据名称前有*(星号) 符号。 可以在报告中确认下列信息:
    • 被调用次数 – 程序或复杂机器接口指令调用的次数
    • 调用次数- 调用其他程序的数量。如果过程可用并且定义PEX定义时进行相应设置,也会记录过程调用数量。
    • 机器指令CPLX调用- 程序调用复杂机器接口指令的数量。
    • CPU使用- CPU使用情况(微秒)
    • CPU% - 处理器使用时间百分比
    • DB SIO -  数据库同步磁盘I/O
    • DB AIO – 数据库异步磁盘I/O
    • NDB SIO – 非数据库同步磁盘I/O
    • NDB AIO – 非数据库异步磁盘I/O
    • 内联统计 – 直接执行的程序或指令的处理器和磁盘的统计信息,不包括这些程序指令被调用的部分。

累计统计信息 – 这个统计信息是某个程序或指令所调用的程序和指令的处理器和磁盘使用情况的总和。所以,如果程序A调用程序B,程序B调用程序C,程序C调用机器接口指令D,那么,程序A的累计统计信息是A, B, C和D的总和。

使用 *PROFILE/*JOB参数 分析处理器性能

作业概要集合类型收集程序、模块、过程、声明以及指令的处理器使用时间。我们经常将这个参数用于整个系统,尤其是ILE代码被大量调用(使得*STATS模式无效)。下面是创建相应定义的命令:
 
ADDPEXDFN DFN(JOBPROF) TYPE(*PROFILE) PRFTYPE(*JOB) JOB(*ALL) TASK(*ALL) INTERVAL(10) MAXSTG(100000)
 
这个定义监控所有的作业和任务并且每5毫秒采样处理器使用时间。集合数据在达到100MB时会自动停止收集。这个定义可以用来收集很长一段时间的系统的活动情况(若干小时)。如果你想收集较短的时间或者是系统的处理器较少,你可以减少 INTERVAL(间隔) 参数,最小到0.1毫秒。
 
下列命令可以启动收集器并指定定义, 它将使用JOBPROF这个定义(我们在前面创建的)启动一个名为JOBPROF的会话
 
STRPEX SSN(JOBPROF)  DFN(JOBPROF)
 
现在只等待收集足够的数据。如果只输入ENDPEX命令(不带参数),你将可以看到收集的事件和采样数量信息。一个好的概要集合,需要在合理的时间内收集至少10000个事件。使用命令CHGPEXDFN更改定义,为INTERVAL(间隔)参数指定一个更小的值。需要重启集合使定义生效。
 
收集了足够的数据后,使用下面的命令停止收集并存储数据,
 
ENDPEX SSN(JOBPROF)
 
如果你不想将数据存储在默认的库QPEXDATA中,你也可以在命令中指定一个库(library)
 
数据存储后,使用下列命令输出数据
 
PRTPEXRPT MBR(JOBPROF)
LIB(QPEXDATA) TYPE(*PROFILE)
PROFILEOPT(*SAMPLECOUNT *PROCEDURE)
 

这可以输出成员 JOBPROF的内容(所有的数据成员的名字就是执行STRPEX和ENDPEX时的会话名称)。配置概要参数输出一个直方图,这个图是基于采用数量并使用过程组织的直方图(如图2)。如果想获得不同级别的视图,你也可以使用程序、模块或声明数量来组织直方图。
如直方图列所示(如图2),可以看到使用处理器最多的程序。以程序来组织报告,下面的列将显示你所需要的信息:
    • Hit Cnt – 程序采样数量。条目应该有最少1000个采样点来确认集合统计信息有效。
    • Hit % - 程序采用树龄占总采样数量百分比。
    • Cum % - 报告中某程序累计处理器使用时长占所有程序累计处理器使用时长百分比
    • Name(名称) – 程序名称。
 

使用 *PROFILE/*PGM参数分析处理器性能

如果已知哪个程序使用了过多的CPU资源,你可以使用*PROFILE/*PGM参数收集程序使用处理器的详细信息,使用下面的命令创建定义。
 
ADDPEXDFN DFN(PGMPROF) TYPE(*PROFILE) PRFTYPE(*PGM) JOB(*ALL) TASK(*ALL) INTERVAL(0.1)  PGM((library/
program module procedure *PGM)) 
 
这个定义收集所有的作业和任务信息,每隔0.1毫秒采样一次系统的处理器数据。可以为程序指定模块和过程级别,或也可以指定*ALL(全部)包括模块和程序。通常在一定的时间内,指定更小的间隔来获得足够的采样点(对于一个程序至少需要几千个采样点)。
 
使用下面的命令启动收集器并指定定义,下面的命令将会使用定义PGMPROF并创建一个名为 PGMPROF的会话。
 
STRPEX SSN(PGMPROF)  DFN(PGMPROF)
 
如同收集一个任务属性,你必须收集足够数量的采样数据,ENDPEX命令可以显示采样点数量。
 
当收集了足够的数据后,使用下面命令停止收集器并存储数据

ENDPEX SSN(PGMPROF)
 
数据存储后,使用下面命令输出数据
 
PRTPEXRPT MBR(PGMPROF) LIB(QPEXDATA) TYPE(*PROFILE) PROFILEOPT(*SAMPLECOUNT *STATEMENT)
 

上面命令将可以输出成员PGMPROF的内容,将输出一个基于采样数据的直方图(如图3)。在图3中,你可以从直方图的列中看到使用处理器时间最长的声明。下面是以声明组织报告时列的说明
     • Hit Cnt – 程序采样数量。条目应该有最少1000个采样点来确认集合统计信息有效。
     • Hit % - 程序采用树龄占总采样数量百分比。
     • Cum % - 报告中某程序累计处理器使用时长占所有程序累计处理器使用时长百分比
     • Stmt Nbr – 程序的声明数量会与INST列中的OPM程序编译数量相同。在编译时必须指定*LIST参数。对于ILE和i5/OS PASE程序,声明数量和编译列的行数相同。
 
 如果你想查看图表报告,PTDV有一个很好用的观察器可以更多的组织形式查看问题。它可以以更高的级别显示数据结果,并且可以向下探索更详细的数据(如图4)。你可以看到它不仅是简单的将程序名称列出来,而且会在机器指令问题中显示QWPPTFLD分类和“XPF WS 打印”。双击任何一个分类,你都可以看到过程和声明的信息,以及程序调用的信息。展开SLIC选项,可以查看各组件的SLIC使用处理器的情况。
 
总结
 
PEX(性能探索器)能够很快。。如果你正在收集和分析追踪的性能数据,通过*STATS和*PROFILE集合类型可以很简单的发现那些占用大量处理器和磁盘支援的程序或过程。性能管理工具产品包含标准的PRTEXRPT, 这个工具能展示很多有用数据,而PTDV可以将这些数据图形化展示。

原作者: Mike Denney(denney@us.ibm.com)
原文链接: http://www.ibmsystemsmag.com/ibmi/administrator/performance/Using-Performance-Explorers--STATS-and--PROFILE-PG/

翻译: Zhang Zhi Jun / Zhang Ze

[{"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SWG60","label":"IBM i"},"Component":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"","Edition":"","Line of Business":{"code":"LOB57","label":"Power"}}]

UID

ibm11145110