服务器负载?top命令/CPU使用率/load average计算方法

当我们学会了用Linux VPS 服务器来建站后,有必要了解load average各种负载平均值的含义,因为我们需要使用top命令了解系统的完成状态,关注变量的实时变化。

要理解这一点,就需要了解以下变量说明。

top 命令 load average 详解

“load average”,表示“系统的平均负载”。内有3个数字,我们能由此确定系统负载是大还是小

以下是如何使用它的详细说明 ▼

top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48
Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 191272k total, 173656k used, 17616k free, 22052k buffers
Swap: 192772k total, 0k used, 192772k free, 123988k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1379 root 16 0 7976 2456 1980 S 0.7 1.3 0:11.03 sshd
14704 root 16 0 2128 980 796 R 0.7 0.5 0:02.72 top
1 root 16 0 1992 632 544 S 0.0 0.3 0:00.90 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
  • 统计信息区域的前5行,是整个系统的统计数据。
  • 第1行是任务队列信息,与uptime命令的执行结果相同。

其内容如下:

  • 01:06:48 当前时间
  • up 1:22 系统运行时间,格式为时:分
  • 1 user 当前登录用户数
  • load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。
  • 3个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
  • 第2和第3行是进程和CPU信息。
  •  

当有多个CPU时,此内容可能超过2行。内容如下:

  • Tasks: 29 total 进程总数
  • 1 running 正在运行的进程数
  • 28 sleeping 睡眠的进程数
  • 0 stopped 停止的进程数
  • 0 zombie 僵尸进程数
  • Cpu(s): 0.3% us 用户空间占用CPU百分比
  • 1.0% sy 内核空间占用CPU百分比
  • 0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
  • 98.7% id 空闲CPU百分比
  • 0.0% wa 等待输入输出的CPU时间百分比
  • 0.0% hi
  • 0.0% si

以下是最后两2行内存信息:

  • Mem: 191272k total 物理内存总量
  • 173656k used 使用的物理内存总量
  • 17616k free 空闲内存总量
  • 22052k buffers 用作内核缓存的内存量
  • Swap: 192772k total 交换区总量
  • 0k used 使用的交换区总量
  • 192772k free 空闲交换区总量
  • 123988k cached 缓冲的交换区总量。

内存的内容被换出到交换区域,然后又被交换到内存中,但尚未被覆盖使用过的交换区域。

此值是内容已存在于内存中的交换区域的大小。

当再次交换相应的存储器时,不再需要写入交换区域。

进程的详细信息,显示在每个进程信息区域的统计区域下方。

首先,让我们来了解每个列的含义。

列名含义

  • PID 进程id
  • PPID 父进程id
  • RUSER Real user name
  • UID 进程所有者的用户id
  • USER 进程所有者的用户名
  • GROUP 进程所有者的组名
  • TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
  • PR 优先级
  • NI nice值。负值表示高优先级,正值表示低优先级
  • P 最后使用的CPU,仅在多CPU环境下有意义
  • %CPU 上次更新到现在的CPU时间占用百分比
  • TIME 进程使用的CPU时间总计,单位秒
  • TIME+ 进程使用的CPU时间总计,单位1/100秒
  • %MEM 进程使用的物理内存百分比
  • VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
  • SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
  • RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
  • CODE 可执行代码占用的物理内存大小,单位kb
  • DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
  • SHR 共享内存大小,单位kb
  • nFLT 页面错误次数
  • nDRT 最后一次写入到现在,被修改过的页面数。
  • S 进程状态。
  • D=不可中断的睡眠状态
  • R=运行
  • S=睡眠
  • T=跟踪/停止
  • Z=僵尸进程
  • COMMAND 命令名/命令行
  • WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
  • Flags 任务标志,参考 sched.h

linux load average 调试说明

在查看了top命令所显示的状态后,需要依据其来做优化,但top命令显示的只是表象,所以我们可以通过iostat或者vmstat命令进一步的观察。

vmstat 查看系统负载

vmstat
procs -------memory-------- ----swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 100152 2436 97200 289740 0 1 34 45 99 33 0 0 99 0

procs

  • r 列表示运行和等待cpu时间片的进程数,如果长期大于1,说明cpu不足,需提高cpu。
  • b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。

cpu 表示cpu的使用状态

  • us 列显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。
  • sy 列显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。
  • wa 列显示了IO等待所占用的CPU时间的百分比。
  • 这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。
  • id 列显示了cpu处在空闲状态的时间百分比。

以下文章说明了Linux Load Average过高多少合适?