简介
top可以用来实时显示linux系统的运行情况。
打印输出
top命令输出三个部分:
- 统计区 主要由统计任务、CPU、内存、交换区的信息
- 字段头 任务的字段头,标明字段的含义
- 任务区 每一行打印一个任务信息
## 统计区
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
## 字段头
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
## 任务区
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
含义说明
统计区
第一行:
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
Tasks: 384 total, 1 running, 383 sleeping, 0 stopped, 0 zombie
一共有384个任务,这个任务应该就是指线程,其中1个在运行中,其他383个都在休眠中,0个stopped状态的进程,0个zombie状态的进程,stopped状态表示被跟踪的进程,比如被gdb attach的进程,zombie表示僵尸进程。
Cpu
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
Mem: 132118792k total, 120647324k used, 11471468k free, 2667992k buffers
总共物理内存:132118792k
已经使用内存:120647324k
空闲的内存:11471468k
buffers内存:2667992k 这个内存其实是包含在已使用的内存中的。
Swap
Swap: 32767996k total, 919760k used, 31848236k free, 99993460k cached
关于交换的区的机制,我还不是很熟悉,后续研究补充。
字段头
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 启动进程的命令行
任务区
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
## 这里不再解释
其他操作技巧
只监控某个进程
top -p $PID
[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的使用情况。
[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字段只显示进程的文件名,或者命令行名,不是完整的执行命令。
top -c ## 显示完整的命令
[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等等
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