Linux:了解平均负载和 CPU 百分比?

Linux:了解平均负载和 CPU 百分比?

当我top在 ubuntu 系统上执行命令时,我看到以下结果

顶部 - 07:58:58 启动 1:21,1 个用户,平均负载:0.82、0.73、0.55 任务:总计 293 个,1 个正在运行,292 个正在休眠,0 个已停止,0 个僵尸 %Cpu(s):0.8 us,0.8 sy,...

我需要了解load average%cpu

我的理解基于我的知识和CPU 利用率高但平均负载低

平均负载

平均负载是衡量一段时间内内核运行队列中有多少任务在等待(不仅仅是 CPU 时间,还有磁盘活动)的指标。这是否意味着上述结果中 0.83 个任务正在等待?它怎么会是十进制数?另外,三个不同的数字又是什么意思0.83 0.73, 0.55

%中央处理器

这表示在过去 x 秒内 CPU 工作了多长时间。例如:- 如果 CPU 利用率显示 60%,则表示在过去 x 秒内 CPU 工作了 60% 的时间。我的理解正确吗?如果正确,那代表什么%Cpu(s): 0.8 us

另外,如果我有 4 个 CPU 处理器,并且 %CPU 显示 50%,这是否意味着所有核心都工作在 50% 或 2 个 CPU 工作在 100%?

答案1

了解平均负载:0.83、0.73、0.55

  • 负载是系统执行的计算工作量的度量。这三个值是一段时间内的平均负载。时间间隔是最后 1 分钟、5 分钟和 15 分钟。平均负载计算为指数移动平均线。如果你愿意,你可以深入阅读检查平均负载

  • 单核系统

  • 平均负载值的范围各不相同。对于单核系统,该值0.83表示您的 CPU 在最后一分钟的容量为 83%。值为1.0表示您的 CPU 容量正好为 100%。如果值为 ,1.0即使只增加一点点额外的工作,系统也会超载。大于 的值1.0表示系统负载超过了其处理能力。这并不坏,只是意味着更多的进程正在等待 CPU 时间。您会看到计算机运行缓慢。

  • 多核系统

  • 对于多核系统,您可以将平均负载除以您拥有的核心数。例如,如果平均负载为0.83并且有 4 个核心,则您需要0.83 / 4获得0.2075(0.83 / 4) * 100以获得20.75%容量。对于四核系统,如果平均负载等于 ,4.0则表明所有核心的容量都为 100%,任何过载都会导致进程等待 CPU 时间。

  • 当您超出最大容量时,就会发生过载。负载平均值作为过载可能有点难以理解,因为它基于您的核心。如果您有四核 CPU,则在负载值超过之前不会过载。4.0如果第一个负载平均值为,5.50则意味着您的系统过载 150%,并且平均而言,最后一分钟有 1.5 个进程必须等待 CPU 时间。

了解 %Cpu(s): 0.8us, 0.8sy....

  • 此部分为展示如何CPU 的使用情况。每个后缀代表特定的东西,并表示 CPU 在该组任务上花费了多少时间。如果将该输出行中的所有数字相加,则总计为 100%。

  • 任务定义为...来源

  • 我们是 CPU 的百分比用户进程

  • 西是 CPU 的百分比系统进程

  • 是具有优先级升级的 CPU 进程的百分比好的 妮复活节彩蛋

  • ID是 CPU 的百分比不曾用过

  • 是等待的 CPU 进程的百分比I/O 操作

  • 你好是 CPU 服务的百分比硬件中断

  • 是 CPU 服务的百分比软件中断

  • 英石在虚拟化环境中,部分 CPU 资源分配给每个虚拟机 (VM)。操作系统会检测何时有工作要做,但由于 CPU 在其他 VM 上繁忙,因此无法执行这些工作。以这种方式损失的时间量是偷时间

答案2

此脚本通过将平均负载除以 CPU 核心数来计算 1、5 和 15 分钟的系统负载百分比,并将结果转换为百分比(%)

# cat load_usage.sh
#!/bin/bash
Hostnames=$(uname -n | cut -d. -f1)
os_type=$(uname -s)

case "$os_type" in
  Linux)
# Define color variables
GREEN="\033[0;32m"
YELLOW="\033[0;33m"
NC="\033[0m" # No Color

cputhreshold=99.0

# Get the CPU load averages
load_avg_1min=$(uptime | awk -F'load average: ' '{print $2}' | cut -d ',' -f1 | tr -d ' ')
load_avg_5min=$(uptime | awk -F'load average: ' '{print $2}' | cut -d ',' -f2 | tr -d ' ')
load_avg_15min=$(uptime| awk -F'load average: ' '{print $2}' | cut -d ',' -f3 | tr -d ' ')

# Get the number of CPU cores
cpu_core=$(nproc)

# Calculate percentages
percentage_1min=$(echo "scale=2; ($load_avg_1min / $cpu_core) * 100" | bc)
percentage_5min=$(echo "scale=2; ($load_avg_5min / $cpu_core) * 100" | bc)
percentage_15min=$(echo "scale=2; ($load_avg_15min / $cpu_core) * 100" | bc)

if (( $(echo "$percentage_1min >= $cputhreshold" | bc -l) )); then
# Print the table header in a box
printf "+------------------+-------------------+------------------+-----------------+--------+\n"
printf "| %-16s | %-17s | %-16s | %-14s | %-06s |\n" "HostName" "Time Intervals" "Load Average" "System Load (%)" "Status"
printf "+------------------+-------------------+------------------+-----------------+--------+\n"

# Print the table rows
printf "| %-16s | %-17s | %-16s | %-15s | ${YELLOW}%-06s${NC} |\n" "" "1 minute" "$load_avg_1min" "$percentage_1min%" ""
printf "| %-16s | %-17s | %-16s | %-15s | ${YELLOW}%-06s${NC} |\n" "$Hostnames" "5 minutes" "$load_avg_5min" "$percentage_5min%" "High"
printf "| %-16s | %-17s | %-16s | %-15s | ${YELLOW}%-06s${NC} |\n" "" "15 minutes" "$load_avg_15min" "$percentage_15min%" ""

# Print the bottom border of the table box
printf "+------------------+-------------------+------------------+-----------------+--------+\n"
else
# Print the table header in a box
printf "+------------------+-------------------+------------------+-----------------+--------+\n"
printf "| %-16s | %-17s | %-16s | %-14s | %-06s |\n" "HostName" "Time Intervals" "Load Average" "System Load (%)" "Status"
printf "+------------------+-------------------+------------------+-----------------+--------+\n"

# Print the table rows
printf "| %-16s | %-17s | %-16s | %-15s | ${GREEN}%-06s${NC} |\n" "" "1 minute" "$load_avg_1min" "$percentage_1min%" ""
printf "| %-16s | %-17s | %-16s | %-15s | ${GREEN}%-06s${NC} |\n" "$Hostnames" "5 minutes" "$load_avg_5min" "$percentage_5min%" "Normal"
printf "| %-16s | %-17s | %-16s | %-15s | ${GREEN}%-06s${NC} |\n" "" "15 minutes" "$load_avg_15min" "$percentage_15min%" ""

# Print the bottom border of the table box
printf "+------------------+-------------------+------------------+-----------------+--------+\n"
fi
    ;;
  *)
    echo -e "This script is not supported for $os_type - $Hostnames"
    ;;
esac

在此处输入图片描述

相关内容