Xiao Qing
作者Xiao Qing·2020-07-07 17:24
系统工程师·浪潮商用机器有限公司

用命令和工具分析System i常见性能问题

字数 4127阅读 11853评论 1赞 11

当 AS/400 系统出现性能问题时,可能是系统中的某个或某些资源出现了瓶颈,这些资源包括 CPU 资源、 main memory (内存)资源、硬盘资源、网络资源和应用程序等等。

本文将概括地介绍用命令和IBM Navigator for i工具来监控这些资源的使用情况,从而为分析问题提供一些线索。

1.CPU 负载

CPU 资源是 AS/400 最重要的资源,有些客户规定生产系统的 CPU 使用率不要超过 60%-70% ,如果超过了这个最大限制,客户就要立刻重新考量系统的运行情况以避免系统出现可能的性能问题, AS/400 提供如下命令和工具来帮监控 CPU 使用率、系统中有哪些作业占用了过多的 CPU 资源、系统中一共有多少个 active job 、 CPU 使用率的变化曲线等等。

常用命令或工具:

· WRKACTJOB (Work with Active Jobs) 命令。

查看系统中所有作业的信息,作业按照所处的子系统分类,显示作业名称、当前用户、作业的类型、 CPU 使用率、作业、作业的状态( 55 种)以及系统中的活动作业数量等信息。

· WRKSYSACT (Work with System Activity) 命令 , 若要使用 WRKSYSACT 命令,需要购买 5770-PT1 特许程序的支持。

查看系统中处于运行( running )状态的作业,包括作业或任务的名称、用户名、作业号、线程号、优先级、 CPU 使用率、同步物理 I/O, 异步物理 I/O 和 SQL 处理所占 CPU 时间的百分比。

可以通过设定刷新时间间隔来自动刷新,缺省时间间隔为 5 秒。

· IBM Navigator for i 工具中的作业管理功能,它是图形化的监控工具,可以方便地展开下图中的任何子项分门别类地显示作业相关的信息,使用起来非常直观。

· 用 IBM Navigator 监控 CPU 使用率。
Performance->Investigate->Collection Service->CPU ,如下图所示。

IBM Navigator 能够从不同维度对 CPU 资源的消耗情况进行分析。

以“ CPU Utilization Overview ”为例,它可以图形化的显示系统的 CPU% 的变化曲线。

还可以按作业或任务分类显示 CPU% ,可以提取出系统中最耗费 CPU 资源的作业或任务的排序列表。

2.Memory

AS/400 的内存资源实际上被称为 Main Memory ,衡量内存的指标主要有内存池的大小、错页率和 wait-to-ineligible 等等,可以通过以下的命令和工具进行监测。

· 用 IBM Navigator 系统监测的主存的状态。
Performance->Investigate Data->Collection Service->Memory ,如下图所示。

以“ Memory Pool Sizes and Fault Rates ”为例 , 这里的 Fault 是指 Page Fault ,它的含义是指内存中没有作业运行所需的数据,需要从硬盘间接读取,此时就发生了一次 Page Fault ,因此从理论上来讲 Fault Rate 越低越好。

· WRKSYSSTS 命令
WRKSYSSTS 命令显示 DB Fault Pages 、 Non-DB Fault Pages 、 Wait-Inel 等与内存相关的性能指标。

这里的 Wait-Inel 是 wait-to-ineligible 的缩写,作业从 wait 状态进入到 ineligible 状态,也就是说作业从等待 active level 转到了 long wait , long wait 是等待某些资源,这些资源是保证这个作业继续运行所必须的资源, wait-to-ineligible 的值越高,代表系统需要从硬盘或其他设备中读取更多的数据,效率也就越低。

· IBM Navigator for i 中的 Memory Pools and Activity Level 。

显示每个 Memory Pool 的名称、 size 和 Activity Level 的数值, Activity Level 是系统准许同时进入内存池作业的数量,如果将 QPFRADJ 系统值设定为 2 或 3 ,系统会自动地调整 pool size 和 activity level 的值以提高系统性能。

3.硬盘

硬盘相对于内存来讲,它的存储容量大,但响应速度慢,通常在毫秒级别, AS/400 会通过特殊的算法将所需的数据提前预取到内存,尽量减少硬盘 IO 的发生。

AS/400 硬盘的性能指标主要包括硬盘的繁忙程度、 IO 响应时间, IOPS 等等。

可以用如下命令或工具收集硬盘性能指标 :

· WRKDSKSTS 命令

WRKDSKSTS 是实时分析 AS/400 硬盘使用情况的常用命令,这条命令除了能够显示每块硬盘或 LUN 的类型、 size 、硬盘空间占用率以外,还可以显示某个时间段内每块硬盘的 IO 请求和 size 、读 / 写请求次数、读 / 写量和硬盘繁忙程度。

· 用 IBM Navigator 监测的硬盘响应时间、 IOPS 等性能指标

Performance->Investigate Data->Collection Service->Disk


· 用 Performance Tool 收集 System Report 、 Component Report

具体生成方法:

a.GO PERFORM

b.3.Print performance report

c.Option 1=System report

d.Option 2=Component report

System Report :

Component Report :

4.网络

· 用 Performance Tools 收集 System Report 和 Component Report

System Report 中包括以太网线描述的名称、线速、线描述平均繁忙程度、传输数据和接收数据的线描述平均利用率、线描述最大使用率、平均响应时间等。

Component Report 中含有更详细的信息,如某一时刻接收和发送了多少 KB 的数据、对单播和非单播接收和发送包的数量也有相应的统计。

· 用 IBM Navigator 监测系统以太网通信的性能指标
Performance->Investigate Data->Collection Service->Communication

5.应用程序

应用程序性能问题的分析涉及的因素很多,本文只讨论如何找到哪些对象上有锁、锁的类型、哪些作业上了锁、哪些作业请求正在锁定的目标、上锁对象的记录号以及 call stack 。

· WRKOBJLCK(Work with Object Locks) 命令

查看某个目标上的锁的情况,如图所示,在 XQLIB/INVOICE 库中的 INVOICE 目标上有锁,锁的类型是 MBR ( Member control block locks) 和 Data 锁类型,锁请求条件分别是 SHRRD 和 SHRUPD, 也就是说对于 INVOICE 目标的 MBR 是共享读锁,对于数据来讲是共享更新锁

如何判断是哪个作业在 INVOICE 目标上上锁呢?用 8=Work with member lock ,就可找到 QPADEV0006作业 是上锁的的那个作业。

· Performance Trace report

  1. 执行命令 STRPFRTRC
  2. 再现问题
  3. 执行命令 ENDPFRTRC MBR(DLCKTST)

4.PRTLCKRPT MBR(DLCKTST) 生成报告

从报告的内容,可以看到锁等待了多长时间、请求的作业名称、持有锁的作业名称、被上锁的对象名称、在哪些记录上有锁等等信息。


· WRKSYSACT(Work with System Activity) 命令
5=Work with job 找到要查看的作页

12.Wrok with locks, if active

之后的操作与前面介绍过的 WRKOBJLCK 命令相同。

· 用 IBM Navigator 监测作业的数据库锁

Work Management-> 作业名称 -> 右键 ->Performance->Investigate Job Wait data

可以观察到数据库记录锁的竞争时间,对于分析应用程序的 lock 的占用时间非常有帮助。


· 查看程序的 Call Stack

a) 用 WRKACTJOB 命令找到要检测的作业名

b ) 5=Work with

c) 11.Display call stack, if active

这里的 _QRNP_PEP_SUBFB01 是 PEP ( Program Entry Procedure )名称,是动态调用之后第一个被调用的 PEP 名称 , 即被调用的程序名。 _QRNP_PEP_SUBFB01 表示这个程序是一个 ILE RPG 程序。

. _QRNP_PEP 表示是 ILE RPG/400 程序

· _C_PEP 表示是 ILE C/400 程序

· _CL_PEP 表示是 ILE CL 程序

· _QLN_PEP 表示是 ILE COBOL/400 程序

以这个程序为例,先调用 QUOXXXX 模块、 QUIXXXX 模块,最后调用 QCMD( 解释命令语言处理器 ) 模块。

通过 Call Stack ,我们可以找出程序的调用过程和程序的层次结构,为进一步分析程序的性能问题找出线索。

Notes:

  1. iDoctor 是 IBM LAB service 的产品,非本文讨论范围。
  2. 文本只是工作中的一些体会,仅供大家参考。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

11

添加新评论1 条评论

asdf-asdfasdf-asdf研究学者cloudstone
2020-07-08 09:28
400 越来越少了
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

X社区推广