runq-sz在sar中是怎么算的?

runq-sz在sar中是怎么算的?

我想问一下关于 的输出的问题sar -q。如果有人能帮助我理解,我将不胜感激runq-sz

8 cpu threads我有一个 cpu 线程打开的系统 RHEL 7.2

[ywatanabe@host2 ~]$ cat /proc/cpuinfo | grep processor | wc -l
8

以下是sar -q 我的系统的结果,但runq-sz似乎是低的相比ldavg-1

                runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
05:10:01 PM         0       361      0.29      1.68      2.14         0
05:11:01 PM         0       363      1.18      1.61      2.08         2
05:12:01 PM         0       363      7.03      3.15      2.58         1
05:13:01 PM         0       365      8.12      4.15      2.96         1
05:14:01 PM         3       371      7.40      4.64      3.20         1
05:15:01 PM         2       370      7.57      5.26      3.51         1
05:16:01 PM         0       366      8.42      5.90      3.84         1
05:17:01 PM         0       365      8.78      6.45      4.16         1
05:18:01 PM         0       363      7.05      6.40      4.28         2
05:19:02 PM         1       364      8.05      6.74      4.53         0
05:20:01 PM         0       367      7.96      6.96      4.74         1
05:21:01 PM         0       367      7.86      7.11      4.93         1
05:22:01 PM         1       366      7.84      7.31      5.14         0

man sar,我认为runq-sz代表运行队列内的任务数量,其状态为任务运行对应于 中的 R 状态ps

          runq-sz
                 Run queue length (number of tasks waiting for run time).

实际上代表什么runq-sz

答案1

此手册页对此属性有更详细的解释:

运行q-sz

内存中等待 CPU 运行的内核线程数。通常,该值应小于 2。值始终较高意味着系统可能受 CPU 限制。

解释结果

与许多“指标”的情况一样,您必须将它们结合使用来解释是否存在性能问题。该特定指示器指示您的系统是否缺乏 CPU 时间。

而 load1、5、15 表示进程位于运行队列中,但被迫等待运行时间。 load1,5,15 变量告诉您​​系统的总体趋势,以及是否有大量进程在等待(增加负载)与下降趋势。但是进程可以等待 load1,5,15 的各种情况,通常是当您看到高 load1,5,15 倍时 I/O 被阻塞。

使用 runq-sz,您可以等待 CPU 的时间。

参考

答案2

这篇文章是第一篇出现在 Google 中的文章,上面的最后一个答案被标记为已接受。

答案提供了参考,并引用了文本索拉里斯联机帮助页。然而,OP 的问题是关于RHEL 7。 Solaris 和 Linux 中对可运行进程报告的处理是不同的。

  • Solaris 倾向于使用平均负载/队列作为有多少进程正在等待运行的指示器。

  • Linux倾向于使用平均负载/队列作为有多少进程正在运行+有多少进程正在等待运行的指标。

  • runq-szin 的Linux 表示sar -q更可能表示当前正在运行的进程数 + 排队进程数。

参考 OP 的 8 线程实例的原始示例,arunq-sz小于 8 表示这方面的最佳性能。

我同意低runq-sz与高loadavg可能表明某种阻塞或睡眠进程。您可以在OP的示例sar输出中部分看到这一点,在blocked列中。

答案3

我会说:正常运行时间给你最近 1 分钟、5 分钟和 15 分钟的平均负载。但在正常运行时间的一段时间内(例如sar),您不会获得系统负载的瞬时快照。 (sar和)都uptime报告相同的负载信息。

ldavg-1  -> last 1 minute
ldavg-5  -> last 5 minutes
ldavg-15 -> last 15 minutes.

runq-sz 是需要 CPU/等待 CPU 的进程数量

确实与平均负载相关(如果负载较高,则可能出现 CPU 饥饿),但并不直接相关。

等待 --> 进程等待某些资源,这是没有限制的(进程等待很长时间,因此平均负载可能非常高)。

排队进程是一种在队列中获取CPU的进程,即100%等待CPU,并且一旦CPU可用就会获取一些,即CPU饥饿。

因此,sar -q我们可以了解是否存在 CPU 饥饿(队列大小非常大)。从 uptime 和 ldavg-# 我们可以了解系统上的负载,并可能得到队列大小高的提示。

希望能帮助到你。

答案4

你说对于Linux:

  • 平均负载 = 运行进程 + 等待进程
  • runq-sz = 正在运行的进程 + 排队的进程

这意味着平均负载运行q-sz包括正在运行的进程

那么有什么区别等待进程排队进程请?

例如,您可以解释一下吗(第一行 runq-sz=10)?

这是针对 20 核(40 线程)服务器的

ldavg-1 > runq-sz 是否意味着许多进程正在等待资源(例如 I/O)?

06:10:01      runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15
06:20:02           10      1696     28.95     30.21     28.25
06:30:02            8      1672     25.93     27.57     27.78
06:40:02            8      1707     31.82     35.37     32.88
06:50:01            9      1707     28.90     31.06     31.89

我的服务器的 CPU 使用率很低:80% 空闲。

CPU使用率

问候,

相关内容