top是检查机器当前运行状况的第一个命令,就好比是机器体检时的第一张报告单。

先了解一下TOP命令的使用

[root@localhost /]# top -help
	top: procps version 3.2.8
usage:	top -hv | -bcisSHM -d delay -n iterations [-u user | -U user] -p pid [,pid ...]

这个命令的使用比较简单,选项解释如下:

  1. -h,表示help的意思,查看top命令的使用语法。
  2. -v,表示version的意思,和-h的运行结果是一样,可以查看top命令的版本。
  3. -d,如果仅仅执行top命令,一般默认是3秒钟数据更新一次,这个可以更改多长时间更新一次,单位是秒。
  4. -n,表示数据更新多少次后就结束命令的执行。默认是不结束。
  5. -u,显示指定用户的进程。
  6. -p,显示指定的进程信息。


下面看一个具体TOP的输出

top - 16:03:58 up 23:55, 17 users,  load average: 3.39, 3.88, 3.62
Tasks: 288 total,   4 running, 284 sleeping,   0 stopped,   0 zombie
Cpu(s): 30.1%us,  0.5%sy,  0.0%ni, 65.4%id,  3.9%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:  32797280k total, 32570120k used,   227160k free,   170492k buffers
Swap: 33554424k total,     1364k used, 33553060k free, 27500872k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                             
27545 root  20   0 2523m 2.4g  620 R 100.0  7.8   7:26.00 fsmepsnormalize                                                                                                    
27574 root  20   0 37196  22m 1816 R 100.0  0.1   6:25.86 pocketsphinx_ba                                                                                                    
27593 root  20   0 24888  11m 1424 R 98.9  0.0   3:10.77 pocketsphinx_ba                                                                                                     
    1 root      20   0 19400 1084  880 S  0.0  0.0   0:00.83 init



下面逐个解释是什么意思吧。


一,前面两行信息

  1. 16:03:58 表示系统当前时间。
  2. up 23:55,表示系统已经运行时间。
  3. 17 users,当前登录的用户数。
  4. load average: 3.39 , 3.88 , 3.62。这分别表示内核任务队列在1分钟、5分钟、15分钟的长度。就是通常我们说的负载。
  5. Tasks:288 total。当前系统的进程总数。
  6. 4 running,当前系统中有4个正在运行的进程。
  7. 284 sleeping ,当前系统中有284个休眠的进程。
  8. 0 stopped 。停止进程数为0。
  9. 0 zombie。僵死进程数为0。


二,CPU信息




  1. %us。用户空间进程占用CPU时间的百分比。
  2. %sy。内核空间进程占用CPU时间的百分比。
  3. %ni。ni表示nice的意思,也就是哪些用户进程被提升优先级之后,占用的CPU运行时间。
  4. %id。系统空闲时间。
  5. %wa。这个表示CPU在等待磁盘写入的时间。
  6. %si。CPU处理软中断(soft interrupt)的时间百分比。
  7. %hi。CPU处理硬中断(hard interrupt)的时间百分比。
  8. %st。这个表示在有虚拟机的时候,被虚拟机占用的CPU时间。st表示窃取的意思,steal的意思。

很明显,上面这些百分比相加的话,是等于100%的。这只表示单个CPU的运行状况。



三,内存使用信息



  1. total。表示系统可用的物理内存总量。
  2. used。当前已经使用的物理内存总量。
  3. free。当前的空闲内存总量。
  4. buffers。用作系统内核缓存的物理内存总量。


四,系统交换区信息



  1. total。系统全部的交换区总量。
  2. used。当前已经使用的交换区总量。
  3. free。空闲的交换区总量。
  4. cached。被缓冲的交换区总量。

五,进程信息


  1. PID。进程ID。
  2. USER。当前进程的用户,就是这个进程是由谁来执行的。
  3. PR。进程执行优先级。
  4. NI。当前进程的NICE值。nice值可以调整进程运行的优先级。
  5. VIRT。当前进程对虚拟内存使用量。
  6. RES。当前进程的物理内存使用量。
  7. SHR。当前进程的共享内存使用量。
  8. S。当前进程的状态,可以是R= 正在运行状态,S=休眠状态,D=不可中断的睡眠状态,T=跟踪/停止,Z=僵尸进程
  9. %CPU。当前进程使用CPU的百分比。
  10. %MEM。当前进程使用内存的百分比。
  11. TIME+。当前进程的累计CPU占用时间
  12. COMMAND。当前进程的命令行。


所在的输出都解释了,就是上面的几个部分。当然,如果发现在问题,先看哪些指标不正常,再执行具体的更详细的命令,其实就是更详细的体检。