Linux 系统负载查看之top 指令

󰃭 2016-07-31

top 指令是最常用的系统负载查看工具了

展示与说明


top - 23:39:49 up 5 min,  1 user,  load average: 0.40, 0.23, 0.13
Tasks: 489 total,   1 running, 488 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  3.4 sy,  0.0 ni, 49.4 id, 47.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:   4033728 total,   776172 used,  3257556 free,   107240 buffers
KiB Swap:  4192252 total,        0 used,  4192252 free.   273948 cached Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
  2604 root      20   0    4380   1772   1592 D   7.3  0.0   0:01.87 updatedb.mlocat
     7 root      20   0       0      0      0 S   1.0  0.0   0:01.21 rcu_sched
     9 root      20   0       0      0      0 S   1.0  0.0   0:00.67 rcuos/1
  1597 sphinx    20   0   48272  11964   7128 S   0.7  0.3   0:01.61 searchd
  1525 redis     20   0   37004   8800   2420 S   0.3  0.2   0:00.48 redis-server
  1540 mysql     20   0  689952  61964  10660 S   0.3  1.5   0:01.42 mysqld
  1624 root      20   0  163644   7064   6264 S   0.3  0.2   0:00.49 vmtoolsd
  2443 tony      20   0   29420   3372   2576 R   0.3  0.1   0:00.17 top
     1 root      20   0   33776   4340   2668 S   0.0  0.1   0:02.95 init
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.04 kthreadd
     3 root      20   0       0      0      0 S   0.0  0.0   0:00.12 ksoftirqd/0

这是我的系统的top指令的部分结果

第一行:

表示的是当前系统已经运行的时间, 已登录的用户数量和系统负载的情况

load average 后面的三个值, 分别表示最近一分钟,最近5分钟,最近15分钟的负载情况

一般来说, 当这些数值的值与CPU的数量相同时, 就表示系统已经满载运行了, 如果更高, 则表示系统超负荷运行了, 这种时候就表示要立即对系统进行干预, 查找原因,降低负载, 否则,系统将可能因为负载过高而无法提供正常的服务

第二行:

Tasks 所在的行表示当前系统运行的进程的统计,比如这里我们可以看出, 系统总共有489个进程, 其中一个正在runing的状态, 488在sleeping状态, 0个stopped状态,0个zombie 状态

runing 表示当前cpu正在处理的进程,sleeping表示正在等待cpu进行处理的进程,stopped 表示cpu不会进行处理的进程,zombie 是一个无法进行处理的进程(僵尸进程),这种进程都是异常进程

第三行:

%Cpu(s): 这一行表示cpu的平均负载情况说明

 0.2 us,  3.4 sy,  0.0 ni, 49.4 id, 47.0 wa,  0.0 hi,  0.0 si,  0.0 st

cpu 被占用时, 各个阶段所占用的时间百分比,比如这里就是: 系统平均使用 0.2% 于用户进程,0.4% 于系统进程, 49.4% 处于空闲, 47.0%的时间正在进行I/O 操作

从这里可以看出, 目前这个系统的 I/O 操作比较频繁

第四行:

这一行表示系统的内存情况说明,

第五行:

这一行是系统的swap空间的情况说明

这里讲第四行和第五行一起说明一下:

系统内存的实际可用的空间的计算方法应该是Mem的Free + Mem的buffers + Swap 的cached, 并不是直接的Free

剩下的部分就是各个进程的运行的情况了,包括了内存空间, cpu, 进程优先级等等信息, 可以直观的看出来

这里展示一条

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
1597 sphinx    20   0   48272  11964   7128 S   0.7  0.3   0:01.61 searchd

依次是

1597(进程id)
sphinx(进行运行用户)
20(进程优先级)
0(nice 值,会影响进程的优先级)
48272(进程的虚拟内存空间)
11964(进程实际占用的物理内存空间)
7128(进行占用的共享内存空间)
S(进程处于sleeping 状态)
0.7(进程占用了0.7%的cpu处理时间)
0.3(进程占用的内存空间的百分比)
0:01.61 (进程已经运行的时间)
command (进程启动命令)

关于虚拟内存,物理内存和共享内存之间的关系, 可以查看 http://blog.csdn.net/rebirthme/article/details/50402082

里面进行了比较简单的描述

另外: 进入top 状态后还可以通过一些快捷键对展示的内容进行操作,比如按数字1,就能把上面第三行内容展开,查看各个cpu的运行状态. P(大写) 就可以将下面的进程按照占用CPU的倒序进行排列,M 是按照占用内存倒序排列.等等