求助:编写REXX程序找出LPAR上DA面板中CPU使用率最高的任务
获取SDSF DA面板中CPU使用率最高任务的REXX实现
要筛选出LPAR上DA面板中CPU使用率最高的任务,你需要在遍历行时跟踪当前最高的CPU值并记录对应任务信息。以下是修改后的完整代码及关键说明:
修改后的代码
/* rexx */ RC=ISFCALLS('ON') isfcols = "JNAME CPUPR JTYPE" /*Access the DA panel */ ADDRESS SDSF "ISFEXEC DA" IF RC<>0 THEN EXIT RC /* GET FIXED FIELD NAME FROM FIRST WORD */ /*OF ISFCOLS SPECIAL VARIABLE */ fixedField = word(isfcols,1) Say "Number of rows returned:" isfrows /* Initialize variables to track max CPU job */ max_cpu = 0 max_job_details = "" /* Process all rows */ do ix=1 to isfrows /* Extract current job's data */ current_jname = value("JNAME."||ix) current_cpupr = value("CPUPR."||ix) current_jtype = value("JTYPE."||ix) /* Convert CPUPR to numeric value (remove % symbol if present) */ current_cpu_val = number(translate(current_cpupr,,'%')) /* Update max CPU tracking if current job has higher usage */ if current_cpu_val > max_cpu then do max_cpu = current_cpu_val max_job_details = "Job Name: "||current_jname||", CPU Usage: "||current_cpupr||", Job Type: "||current_jtype end /* Keep original row processing (optional, can remove if not needed) */ Say "Now processing job:" current_jname do jx=1 to words(isfcols) col = word(isfcols,jx) say " Column" col"."ix "has the value:" value(col"."ix) end end /* Display the final result */ say "======================================================" say "Highest CPU Usage Job:" if max_job_details <> "" then say max_job_details else say "No valid CPU usage data found" rc=isfcalls('OFF')
关键修改说明
- 初始化跟踪变量:在遍历前定义
max_cpu(初始为0)和max_job_details(初始为空),分别用于存储当前最高CPU数值和对应的任务信息。 - 提取并转换CPU值:
- 提取当前行的
CPUPR值后,用translate(current_cpupr,,'%')去掉百分号(SDSF中CPUPR通常带%符号)。 - 用
number()函数将处理后的字符串转为数字,确保数值比较的准确性(避免字符串排序导致的错误,比如"10%"字符串小于"9%")。
- 提取当前行的
- 更新最高CPU记录:每次遍历行时,比较当前CPU数值与
max_cpu,若当前值更大,则更新max_cpu和max_job_details。 - 输出最终结果:遍历完成后,打印出记录的最高CPU使用率任务信息。
额外注意事项
- 若你的环境中DA面板的CPU使用率字段名不是
CPUPR,需调整isfcols中的字段名称为对应有效值。 - 如果存在多个任务CPU使用率相同且均为最高值,上述代码仅会记录最后一个遍历到的任务。若需保留所有最高CPU任务,可改用数组存储任务信息。
内容的提问来源于stack exchange,提问作者Dandy
相关产品推荐
相关产品推荐

