我一直在使用优秀的在顶上用于详细检查负载测试的影响,顶部(系统范围)部分的 SystemLevel/CPU 指标与底部(每个进程)部分的 ProcessLevel/CPU 指标之间的区别让我感到困惑。我知道有类似的问题,但我没有找到一个使用我已经理解的上下文来解释的问题。
1. 它是可用容量的百分比,还是已用容量的百分比?
ProcessLevel/CPU 指标的描述如下手册页为“此进程的占用百分比与系统级别上此资源的可用容量相关。” 与此形成对比:
ProcessLevel/DSK(“此进程占所有进程产生的总负载的百分比(即上一个间隔内所有进程的总磁盘访问量)”),以及
top 显然相当于“CPU 使用率”(“该任务自上次屏幕更新以来所占的 CPU 时间份额,以占总 CPU 时间的百分比表示。”)
这两者似乎都指与“......”相关的占领百分比。用过的容量...”,这与“...”截然不同。可用的容量……”。假设手册页描述是正确的……
2. 什么是“可用容量”?
如果它真的在监控“可用容量”,这意味着什么?下图中,当 CPU 空闲 43% 时,ProcessLevel/CPU 达到 97%,这似乎表明它与 SystemLevel/CPU 最大值没有密切关系。它是否考虑了磁盘或网络等待时间?
3. 怎么会>100%呢?
这仅仅是统计/抽样误差吗?它是否与 top 的 %CPU 一样受到“100% = 1 最大 CPU”的影响?如果是这样,我们的单线程 pal 节点如何在下面的最终样本中使用 >100%?
示例
举例来说(可能会打开额外的节点/xen/aws wormcans,在这种情况下很抱歉,但我仍然很欣赏 SF 的智慧,并乐于提出其他问题)...
我正在测试的 node 应用程序(同样出色的素食) 在 4-CPU AWS 实例上以 10req/s 的速率顺利处理特定上传请求类型。在此负载下,节点的 ProcessLevel/CPU 约为 69%:
CPU sys: 73% | user: 155% | irq: 6% | idle: 143% | wait: 21% | steal: 1%
cpu sys: 18% | user: 36% | irq: 0% | idle: 43% | cpu002 w: 3% | steal: 0%
... blah ... CPUNR CPU CMD
2 69% node
(我假设 cpu002 对应 CPUNR=2)。
在服务器无法处理的 14 个请求/秒的负载下(35% 超时),节点的 ProcessLevel/CPU 达到 97%:
CPU sys: 59% | user: 142% | irq: 5% | idle: 170% | wait: 22% | steal: 1%
cpu sys: 14% | user: 40% | irq: 0% | idle: 42% | cpu003 w: 3% | steal: 0%
... blah ... CPUNR CPU CMD
3 97% node
因此,如果 ProcessLevel/CPU 表示可用的CPU 资源,当节点的 CPU 有 43% 处于空闲状态时,它怎么会使用 97% 的可用 CPU 资源?或者(冒着稍微偏离主题的风险),如果 ProcessLevel/CPU 表示用过的CPU 资源,当有足够的 CPU 空闲并且不等待磁盘(最大化网络适配器...)时,为什么这个指标与最大负载如此接近?
最后一个示例,对于 >100% 的问题,这是同一个盒子在 16 个请求/秒时受到了严重的打击(ProcessLevel/CPU 现在高达 111% 并且所有请求都失败):
CPU sys: 44% | user: 125% | irq: 4% | idle: 203% | wait: 24% | steal: 1%
cpu sys: 12% | user: 38% | irq: 4% | idle: 41% | cpu001 w: 5% | steal: 0%
... blah ... CPUNR CPU CMD
1 111% node
干杯!