CPU 占用 与 Load Average 区别 限制 Docker 容器的 CPU 占用率避免超标受限
— ghostart
Load Average
一个常见的误区是认为 Load Avg 的数值直接等同于 CPU 的使用率。正确的解读方式是将其与系统的 CPU 核心数进行比较。
Load Avg < CPU 核心数: 这通常意味着系统资源充足,所有需要运行的进程都可以立即获得 CPU 时间,没有出现排队等待的情况。
Load Avg = CPU 核心数: 这表明系统的处理能力正好与当前的任务需求相匹配,所有 CPU 核心都处于忙碌状态,但没有出现任务积压。
Load Avg > CPU 核心数: 这警示系统已经过载。超出的数值可以理解为正在排队等待 CPU 资源的平均进程数量。例如,在一个4核的系统上,如果 Load Avg 为5,则意味着平均有1个进程在等待 CPU。
CPU 占用率
CPU 占用率,通常以百分比表示,衡量的是在某个时间点,CPU 用于执行非空闲任务的时间比例。它是一个瞬时值,反映了 CPU 当下的工作状态。
两者不能直接转换
纯计算密集型任务,CPU 占用率高;I/O 密集型任务 Load Average 高而 CPU 占用率却可能较低。
如果遇到 Load Average 很高而 CPU 占用比较低的状态,可能是遇到了磁盘 I/O 或网络瓶颈。
实际案例
通过面板查看到一台服务器的 Load Average 占用较高:

在 VPS 上执行 docker stats 查看到某个容器占用了 80% 左右的 CPU:

通过执行 docker update --cpus="0.5" [container_id] 限制这个容器的 CPU 占用:

CPU 占用降低之后,Load Average 也同样降低了:
