charleschchen
作者charleschchen·2022-08-30 11:53
系统架构师·浪潮商用机器有限公司

AIX上topas、nmon、ps命令看到的CPU使用率为何不同

字数 993阅读 2959评论 0赞 1

问题背景

很多客户注意到topas、nmon、ps命令显示的进程CPU使用率有明显差别,通常ps显示的进程CPU使用率相比topas、nmon偏小,而且nmon显示的进程CPU使用率可能超过100%.

问题解析

topas、nmon均采用2秒的默认刷新周期,因此,除首次显示以外,topas/nmon统计的进程CPU使用率是基于最近2秒的使用情况。而ps的统计周期是从被监控命令从进程启动开始计算到ps命令执行的时间段。
除了统计时间段的差异,topas、nmon、ps命令采用的CPU使用率计算公式也有所不同:

  • nmon算法(nmon,然后t,看到的进程CPU使用率)
    CPU% = 进程使用的CPU时间 / 实际流逝时间
    由此公式可知,在分区拥有多个物理CPU的场景下,nmon显示的进程CPU使用率可能超过100%. 典型场景可见于db2、oracle等多线程应用。

  • topas算法(topas命令看到的进程CPU使用率)
    CPU% = 进程使用的CPU时间 / 实际流逝时间 / 物理CPU数量
    由此公式可知,topas统计的进程CPU使用率最高为100%.

  • ps算法(ps aux|head -10看到的进程CPU使用率)
    CPU% = 进程使用的CPU时间 / 实际流逝时间 / 逻辑CPU数量
    由此公式可知,在SMT=8的场景下(POWER9的典型场景),ps命令显示的CPU使用率相比于topas可能有数量级的差异。

注:
从POWER5开始,进程使用的CPU时间均基于处理器的PURR(Processor Utilization Resource Register)寄存器统计,精确度明显提升;

示例 1(以POWER7场景举例)

示例 2(以POWER9场景举例)

说明:
示例使用的进程(nfile/ksh脚本)从启动开始就有持续稳定的CPU消耗,因此不同命令统计周期的影响可以忽略。
**但实际的应用场景中,由于大部分应用进程不会一直处于CPU资源消耗峰值,因此必须考虑统计时间段的差别。考虑到ps统计周期从进程启动开始,如果算上闲时,ps所显示的CPU使用率会相对topas/nmon更低。
**

如果部分客户有个性化监控需求,可以参考如下文档:

AIX上编程获取进程CPU利用率的几种常用方法

https://www.talkwithtrend.com/Document/detail/tid/440631

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

1

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广