系统监控之top

原文链接:系统监控之top
发布时间:2018-12-02 23:49:23

文章目录

简介

top可以用来实时显示linux系统的运行情况。

打印输出

top命令输出三个部分:

  • 统计区 主要由统计任务、CPU、内存、交换区的信息
  • 字段头 任务的字段头,标明字段的含义
  • 任务区 每一行打印一个任务信息

统计区

1
2
3
4
5
top - 22:32:57 up 491 days,  3:21,  3 users,  load average: 0.03, 0.06, 0.01
Tasks: 384 total, 1 running, 383 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.2%us, 0.7%sy, 0.0%ni, 98.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 132118792k total, 120647324k used, 11471468k free, 2667992k buffers
Swap: 32767996k total, 919760k used, 31848236k free, 99993460k cached

字段头

1
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

任务区

1
2
3
4
5
6
7
19305 KentZhan  20   0  258m  56m 7364 S  3.7  0.0 183:20.17 RtTeServer
50069 KentZhan 20 0 20136 1808 1208 R 1.9 0.0 0:00.02 top
1 admin 20 0 24300 1320 1148 S 0.0 0.0 6:05.06 init
2 admin 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 admin RT 0 0 0 0 S 0.0 0.0 0:50.61 migration/0
4 admin 20 0 0 0 0 S 0.0 0.0 19:46.27 ksoftirqd/0
5 admin RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0

含义说明

统计区

第一行:

1
top - 22:32:57 up 491 days,  3:21,  3 users,  load average: 0.03, 0.06, 0.01

当前系统时间是22:32:57,系统已经运行了491天3小时21分,目前有3个用户登录系统,最后的load average表示平均负载率,其后面的3个数字,分别代表1,5,15分钟统计的平均负载率。

关于负载率,就是一定时间内任务使用CPU的百分比,例如计算1分钟任务负载率:

load average = 所有任务使用CPU的时间/(1分钟*CPU个数)

Tasks

1
Tasks: 384 total,   1 running, 383 sleeping,   0 stopped,   0 zombie

一共有384个任务,这个任务应该就是指线程,其中1个在运行中,其他383个都在休眠中,0个stopped状态的进程,0个zombie状态的进程,stopped状态表示被跟踪的进程,比如被gdb attach的进程,zombie表示僵尸进程。

Cpu

1
Cpu(s):  1.2%us,  0.7%sy,  0.0%ni, 98.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

us 表示用户空间中占用CPU百分比

sy 表示内核空间中占用CPU百分比

id 表示CPU空闲状态的时间百分比

wa 表示IO等待占用时间百分比

其他的几个,暂时没用到,待补充。

Mem

1
Mem:  132118792k total, 120647324k used, 11471468k free,  2667992k buffers

总共物理内存:132118792k

已经使用内存:120647324k

空闲的内存:11471468k

buffers内存:2667992k 这个内存其实是包含在已使用的内存中的。

Swap

1
Swap: 32767996k total,   919760k used, 31848236k free, 99993460k cached

关于交换的区的机制,我还不是很熟悉,后续研究补充。

字段头

1
PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

PID 进程ID

user 执行进程的用户

PR 优先级

NI nice值,和优先级相关

VIRT 进程使用的虚拟内存大小

RES 进程使用的、未被换出的物理内存大小

SHR 共享内存大小

S 进程状态,有R、S、T、D、Z

%CPU CPU占用率

%MEM 内存占有率

TIME+ 进程一共使用CPU时间的大小

COMMAND 启动进程的命令行

任务区

1
2
3
4
5
6
7
8
19305 KentZhan  20   0  258m  56m 7364 S  3.7  0.0 183:20.17 RobotTexasServe
50069 KentZhan 20 0 20136 1808 1208 R 1.9 0.0 0:00.02 top
1 admin 20 0 24300 1320 1148 S 0.0 0.0 6:05.06 init
2 admin 20 0 0 0 0 S 0.0 0.0 0:00.02 kthreadd
3 admin RT 0 0 0 0 S 0.0 0.0 0:50.61 migration/0
4 admin 20 0 0 0 0 S 0.0 0.0 19:46.27 ksoftirqd/0
5 admin RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0
## 这里不再解释

其他操作技巧

只监控某个进程

1
top -p $PID
1
2
3
4
5
6
7
8
9
[KentZhang@LOCAL-192-168-97-2 ~]$ top -p 19305
top - 23:32:51 up 491 days, 4:21, 3 users, load average: 0.08, 0.06, 0.01
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3%us, 0.3%sy, 0.0%ni, 99.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 132118792k total, 120680696k used, 11438096k free, 2668112k buffers
Swap: 32767996k total, 919760k used, 31848236k free, 100033744k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
19305 KentZhan 20 0 258m 56m 7364 S 2.0 0.0 184:42.73 RtTeServer

显示单个Cpu的统计信息

执行top后,按 1

可以清楚的看到每个CPU的使用情况。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[KentZhang@LOCAL-192-168-97-2 ~]$ top
top - 23:36:20 up 491 days, 4:25, 3 users, load average: 0.10, 0.09, 0.02
Tasks: 380 total, 1 running, 379 sleeping, 0 stopped, 0 zombie
Cpu0 : 3.3%us, 1.0%sy, 0.0%ni, 95.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu1 : 1.0%us, 1.3%sy, 0.0%ni, 97.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu2 : 0.3%us, 0.3%sy, 0.0%ni, 99.3%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu3 : 0.0%us, 0.3%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu4 : 0.7%us, 0.7%sy, 0.0%ni, 98.6%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu5 : 0.7%us, 1.3%sy, 0.0%ni, 98.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu6 : 0.7%us, 0.7%sy, 0.0%ni, 98.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu7 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 132118792k total, 120682656k used, 11436136k free, 2668112k buffers
Swap: 32767996k total, 919760k used, 31848236k free, 100034680k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
19305 KentZhan 20 0 258m 56m 7364 S 2.3 0.0 184:47.57 RtServer
45304 admin 20 0 2954m 56m 12m S 1.0 0.0 4143:26 java

改变排序方式

在任务区默认是按CPU百分比的大小进行排序的,可以改变排序方式。

使用 “shift + >” 或者 “shift + <” 左右移动字段的排序方式。

显示完整的命令

默认command字段只显示进程的文件名,或者命令行名,不是完整的执行命令。

1
top -c  ## 显示完整的命令
1
2
3
4
5
6
7
8
9
10
11
12
[KentZhang@LOCAL-192-168-97-2 ~]$ top -c
top - 23:43:46 up 491 days, 4:32, 3 users, load average: 0.12, 0.08, 0.01
Tasks: 381 total, 2 running, 379 sleeping, 0 stopped, 0 zombie
Cpu(s): 4.9%us, 1.3%sy, 0.0%ni, 93.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 132118792k total, 120684588k used, 11434204k free, 2668112k buffers
Swap: 32767996k total, 919760k used, 31848236k free, 100034984k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
64228 admin 20 0 662m 20m 4300 S 40.7 0.0 149:47.29 /usr/local/python2714/bin/python
19477 WwwCron 20 0 232m 13m 8144 S 1.7 0.0 0:00.09 /usr/local/php/bin/php /data/wwwr
19504 admin 20 0 158m 3452 2716 R 1.0 0.0 0:00.03 sudo /data/zabbix/bin/PartitionWr
18027 KentZhan 20 0 20284 2092 1324 R 0.7 0.0 0:01.31 top -c

切换内存展示的单位

按 e 键,可以切换单位,从 kb 到 mb,gb,tb等等

1
2
3
4
5
6
7
8
9
10
11
Tasks: 1135 total,   1 running, 1134 sleeping,   0 stopped,   0 zombie
%Cpu(s): 23.4 us, 4.7 sy, 0.0 ni, 69.4 id, 0.0 wa, 0.0 hi, 2.5 si, 0.0 st
KiB Mem : 65791988 total, 1209256 free, 27257884 used, 37324848 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 32357320 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
26183 root 20 0 1783.2m 927.7m 4.6m S 282.8 1.4 13448:00 PushProxy
45190 root 20 0 1779.1m 53.8m 6.4m S 108.2 0.1 49907:32 binanceParser
45579 root 20 0 399.9m 171.8m 6.9m S 88.8 0.3 3098:39 stock-pick
76395 root 20 0 624.2m 51.4m 6.5m S 52.2 0.1 138:56.87 monitor-core-wr
70721 root 20 0 624.1m 57.5m 6.4m S 38.8 0.1 121:43.43 monitor-core-wr