我想知道基于 Red-Hat 的 linux 的输出是否可以由基于 Debian 的 linux 进行不同的解释。
为了使问题更加具体,我所追求的是了解topRed-Hat 系统上命令第一行的“平均负载”是如何解释的,以及如何通过官方文档 ro 代码来验证这一点。
[有很多方法可以解决这个问题,所有这些方法都是问题的可接受答案]
一种可能的方法是找到官方记录此信息的位置。
另一种方法是找到在top我正在处理的特定发行版和版本中构建的代码版本。
我得到的命令输出是:
top - 13:08:34 up 1:19, 2 users, load average: 0.02, 0.00, 0.00
Tasks: 183 total, 1 running, 182 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.2%sy, 0.0%ni, 96.8%id, 2.7%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 3922520k total, 788956k used, 3133564k free, 120720k buffers
Swap: 2097148k total, 0k used, 2097148k free, 344216k cached
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我如何解释负载平均值?
我设法从一个文档源中找到平均负载大约是最后一分钟,并且应该在乘以 100 后由另一个文档源来解释。
所以,问题是:
是 0.02% …
我的 PC 上安装了一个1 核 CPU。有时,uptime显示负载 >1。这怎么可能,这意味着什么?
编辑:值上升到 2.4
我一直iowait在研究顶部实用程序输出中显示的属性,如下所示。
top - 07:30:58 up 3:37, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 86 total, 1 running, 85 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
Run Code Online (Sandbox Code Playgroud)
iowait 一般定义如下:
“这是 CPU 空闲且有一些 IO 待处理的时间。”
我的理解是一个进程在单个 CPU 上运行。在它因为已用完时隙或被阻塞而被取消调度后,它最终可以再次在任何一个 CPU 上再次调度。
在 IO 请求的情况下,将进程置于不间断睡眠状态的 CPU 负责跟踪iowait时间。其他 CPU 将报告与它们的空闲时间相同的时间,因为它们确实处于空闲状态。这个假设正确吗?
此外,假设有一个很长的 IO 请求(意味着进程有几次被调度的机会,但由于 IO 未完成而没有被调度),CPU 怎么知道有“待处理的 IO”?这种信息是从哪里获取的?CPU 怎么能简单地发现某个进程在一段时间内进入睡眠状态以完成 IO,因为任何 CPU 都可以使该进程进入睡眠状态。“待处理 IO”的状态是如何确认的?
我有一个运行 Redis 的 Ubuntu 服务器,它遇到了高负载问题。
# uptime
05:43:53 up 19 min, 1 user, load average: 2.96, 2.07, 1.52
Run Code Online (Sandbox Code Playgroud)
# sar -q
05:24:00 AM LINUX RESTART
05:25:01 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
05:35:04 AM 0 116 3.41 2.27 1.20 4
Average: 0 116 3.41 2.27 1.20 4
Run Code Online (Sandbox Code Playgroud)
34 个开放redis-server连接:
$ sudo netstat -natp | grep redis-server | wc -l
34
Run Code Online (Sandbox Code Playgroud)
$ free -g
total used free …Run Code Online (Sandbox Code Playgroud) 对于仅一个微处理器单元,负载平均输出top可以理解为,如果它在 1.0 以上,则有作业在等待。但是,如果我们在具有l*n逻辑内核的多核系统上有 n 个内核(在我的 Intel CPU 上 n=6 并且l*n= 12,因此输出nproc为 12),我们是否应该将负载平均值除以输出nproc以查看该数字是否为高于 1 以了解是否有(平均)作业在等待,还是更好地用于htop了解并行多核系统是否获得了过多的平均负载?
我认为我的方法是错误的,但是当我看到平均负载高于 10 top 时得出的结论是正确的,我检查了ps哪个进程是昂贵的并发现正在运行的程序溢出,但如果该机器实际上有nproc> 10 的输出如果我知道的话,就不会真正成为调查的原因。你同意?
按照这个https://unix.stackexchange.com/a/279354/108702,我跑了;
lscpu | grep -E '^Thread|^Core|^Socket|^CPU\('
CPU(s): 8
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
Run Code Online (Sandbox Code Playgroud)
然而top:
top - 01:06:47 up 51 days, 6:24, 2 users, load average: 23.67, 22.50, 22.40
Tasks: 5989 total, 1 running, 5919 sleeping, 0 stopped, 0 zombie
%Cpu(s): 84.6 us, 2.7 sy, 0.0 ni, 12.3 id, 0.4 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 32799488 total, 940020 free, 18284088 used, 13575380 buff/cache
KiB Swap: 0 total, …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个服务,如果服务器过载,该服务会阻止其他请求。但是 1 分钟的平均负载对此还不够好,逻辑是这样的:
if load_average > core_count
return render 503
end
return the_requested_page
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用命令给计算机施加压力时stress -c 12 -i 100 --timeout 10,load_average 显示如下内容:
1, 3, 8, 15, 21, 20, 18, 15, 12, 11
^ stress program ends here
Run Code Online (Sandbox Code Playgroud)
如何获得较小分辨率的平均负载(1-2秒,而不是1分钟平均)?
额外信息,我使用此代码读取了负载平均值
在 Linux 或 Unix 操作系统中,我收到文本
系统负载
如下。
谁能告诉我这是什么意思以及如何使用 CLI 命令提取系统负载%?
System load: 6.84
Run Code Online (Sandbox Code Playgroud)