我想问一下关于 的输出的问题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-sz
in 的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% 空闲。
问候,