top的使用方法

top命令主要用于分析Linux服务器当前的实时CPU和内存消耗情况,以及进程的运行情况统计。

命令使用:top ,具体top命令的使用方法和以下截图的各个信息的含义,可通过man top命令来查看。

其中比较常用的是:按1显示各个核的统计,使用-p参数指定所要监控的进程号。

top - 11:32:29 up 109 days, 20:46,  1 user,  load average: 0.24, 0.36, 0.44
Tasks: 113 total,   2 running, 111 sleeping,   0 stopped,   0 zombie
Cpu0  : 27.2%us, 16.4%sy,  0.0%ni, 46.0%id,  0.0%wa,  0.0%hi,  3.7%si,  6.7%st
Cpu1  : 20.2%us, 12.8%sy,  0.0%ni, 55.9%id,  0.0%wa,  0.0%hi,  3.7%si,  7.4%st
Mem:   5991036k total,  5878620k used,   112416k free,    39464k buffers
Swap:  4194300k total,    51312k used,  4142988k free,  1663552k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                         
 8960 root      20   0 4437m 1.2g 5888 S 56.6 20.8  46006:20 java                                                                                             
26114 root      20   0 4709m 2.3g 8400 S 26.4 40.0   2379:41 java                                                                                             
15076 root      20   0 2790m 110m 2332 S  4.5  1.9   4633:09 java                                                                                             
   11 root      20   0     0    0    0 R  2.6  0.0   1041:19 events/0                                                                                         
14970 root      20   0  154m  16m  684 S  1.9  0.3   8628:44 redis-server                                                                                     
 1454 root      20   0 32080 6292  568 S  1.0  0.1 472:03.29 zabbix_agentd                                                                                    
 1456 root      20   0 32080 6316  628 S  1.0  0.1 474:00.31 zabbix_agentd                                                                                    
    9 root      20   0     0    0    0 S  0.3  0.0  22:46.49 ksoftirqd/1                                                                                      
 1393 root      20   0  195m 1180  652 S  0.3  0.0  45:16.13 snmpd                                                                                            
24592 root      20   0 15032 1176  888 R  0.3  0.0   0:00.04 top                                                                                              
    1 root      20   0 19356  572  352 S  0.0  0.0   0:36.70 init

从上到下分析:

系统整体负载统计

第一行:top - 11:32:29 up 109 days, 20:46, 1 user, load average: 0.24, 0.36, 0.44

11:32:29

当前服务器时间

up 109 days

服务器运行了多久

1 user

当前的登录用户数量

load average: 0.24, 0.36, 0.44

系统1分钟,5分钟,15分钟的负载统计,

这个数字在单核和多核之间是存在差别的,

如果是单核,则值在0.0~1.0之间表示正常,一般不要超过0.7,多核类似。

如果是多核,则值在0.0~CPU核心数表示正常,如2核是0到2,4核是0到4。

多核参照单核的标准的话,是:数值 / CPU核数,在0.00-1.00之间正常。

当使用这个数值除以CPU核数,即:数值 / CPU核数,之后,如果大于5则表示系统负载太高。

CPU的核心数查看:

查看物理CPU的个数
#cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc –l

查看逻辑CPU的个数
#cat /proc/cpuinfo |grep "processor"|wc –l

查看CPU是几核
#cat /proc/cpuinfo |grep "cores"|uniq

查看CPU的主频
#cat /proc/cpuinfo |grep MHz|uniq

直接获得CPU核心数  (该命令即可全部算出多少核)
#grep 'model name' /proc/cpuinfo | wc -l

第二行:Tasks: 113 total,   2 running, 111 sleeping,   0 stopped,   0 zombie

113 total

当前系统一共有113个进程

2 running

2个进程正在运行

111 sleeping

111个进程在休眠

0 stopped

停止进程的个数

0 zombie

僵尸进程的个数

CPU的各个核统计

第三、四行:两个CPU核的统计信息

Cpu0  : 27.2%us, 16.4%sy,  0.0%ni, 46.0%id,  0.0%wa,  0.0%hi,  3.7%si,  6.7%st

Cpu1  : 20.2%us, 12.8%sy,  0.0%ni, 55.9%id,  0.0%wa,  0.0%hi,  3.7%si,  7.4%st

us

用户空间进程所用CPU占比

sy

系统空间进程所用CPU占比

ni

调整了进程优先级的进程所用CPU占比

id

空闲CPU占比

wa

等待输入输出的进程所用CPU占比

hi

硬中断所用CPU占比

si

软中断所用CPU占比

内存和交换分区统计

第五行:Mem:   5991036k total,  5878620k used,   112416k free,    39464k buffers

total

物理内存总量

used

已使用的物理内存量

free

空闲的物理内存量

buffers

用作内核缓存的内存量,即内核页缓存,操作系统尽可能地将

从磁盘读出的内容或者要写到磁盘的内容通过页缓存来进行缓冲,

在规定的时间或者当缓存到达一定量时,再刷到磁盘,减少磁盘的读写操作,提高系统性能。

第六行:Swap:  4194300k total,    51312k used,  4142988k free,  1663552k cached

total

交换分区总大小,即分了多少磁盘用作交换分区

used

已使用的交换分区总量

free

空闲的交换分区量

cached

缓冲的交换分区使用量,即内存的内容可以交换到交换分区,

然后再从交换分区加载会内存,加载回之后,交换分区对应的

内容不删掉,而是缓冲起来,故之后内存内容再交换出来时,

如果该内容没有修改过,则不需要再对交换分区进行写出,

减少数据读写量。当交换分区不够时,则可以删除该缓冲的内容

来腾出空间。

对于当前的可用内存量 为:free + buffers + cached

进程统计

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                         
 8960 root      20   0 4437m 1.2g 5888 S 56.6 20.8  46006:20 java                                                                                             
26114 root      20   0 4709m 2.3g 8400 S 26.4 40.0   2379:41 java                                                                                             
15076 root      20   0 2790m 110m 2332 S  4.5  1.9   4633:09 java

PID

进程ID

USER

进程的owner,即是在以该用户登录的身份时启动的。

PR NI

进程优先级,其中PR为整数,NI为负数,绝对值越大,进程优先级越高。

VIRT

进程的虚拟内存大小,VIRT = RES + SHR,即进程申请了多少内存,但是不一定使用了这么多,具体使用了多少物理内存

是RES显示的。

RES

进程所用的实际物理内存大小,即进程实际使用了多少物理内存,包含进程自身的内存和与其他进程共享的内存,但不包括swap out的。在分析进程是否占用太多内存时,关注这个值。

SHR

进程所用的共享内存大小,如共享库,如果需要知道该进程自身独立使用的内存大小,则使用RES-SHR。当共享内存swap out到交换分区之后,则SHR的值会减小。

S

进程状态,对应的值:D = 不可中断的睡眠状态, R = 运行, S = 睡眠, T = 跟踪/停止, Z=僵尸进程

%CPU

上次更新到现在所使用的CPU的占比,即该进程在各个CPU核运行的占比相加,如果是多核,可能超过100%

%MEM

进程所用的物理内存占比,即对于系统正在被使用的物理内存中,该进程使用了多少,如系统物理内存重量为8G,当前共使用了2G,当前进程为30%,则该进程使用了0.6G。

TIME+

进程运行了多久,这个是百秒为单位,即需要乘以100来转为秒,另外一个TIME则是秒为单位。

COMMAND

进程的启动命令,如Java进程是通过java命令启动的。