经常在 Linux
系统中使用 top
命令查看系统系统各种资源的占用数据,有些参数实在疑惑,故写此博客汇总写。
top命令窗口
top - 15:57:32 up 165 days, 20:29, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 76 total, 1 running, 75 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1014836 total, 130316 free, 160796 used, 723724 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 691668 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
14514 root 10 -10 130348 12556 7468 S 0.7 1.2 273:21.86 AliYunDun
1 root 20 0 191048 3740 2252 S 0.0 0.4 20:36.16 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.06 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 2:03.52 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 23:14.34 rcu_sched
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain
11 root rt 0 0 0 0 S 0.0 0.0 0:50.62 watchdog/0
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
14 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
15 root 20 0 0 0 0 S 0.0 0.0 0:03.50 khungtaskd
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback
17 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd
18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
20 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
- 第一行
- top - 15:57:32 up 165 days, 20:29 : 系统已经运行的时间,也可以用
uptime
查看
- 1 user : 当前登录用户
- load average: 0.00, 0.01, 0.05 : 分别表示系统1分钟平均负载、5分钟平均负载、15分钟平均负载
- 第二行 Tasks 表示系统运行的整体进程数量和状态信息
- total 表示系统现在一共有多少个用户进程
- running 表示正在处于running状态的进程
- sleeping 表示正处于sleeping状态的进程
- stopped 表示正处于stopped状态的进程
- zombie 表示僵尸进程的格式
- 第三行 %Cpu(s) 表示的是总体CPU使用情况
us, user
表示用户态的CPU时间比例
sy, system
表示内核态的CPU时间比例,间接表示内核消耗在硬件服务
和软件中断
上的时间
ni, nice
表示运行低优先级进程的CPU时间比例
id, idle
表示空闲CPU时间比例
wa, iowait
表示处于IO等待的CPU时间比例
hi, hard interrupt
表示处理硬中断的CPU时间比例
si, soft interrupt
表示处理软中断的CPU时间比例
st, steal time
表示当前系统运行在虚拟机中的时候,被其他虚拟机占用的CPU时间比例
- 第四行 Mem 内存情况,单位为 KiB
- 第五行 Swap 内存情况,单位为 KiB
- 第六行个别参数:
PID
进程ID
USER
进程所有者的用户名,例如root
PR
进程调度优先级
NI
进程nice值(优先级),越小的值代表越高的优先级,参考使用nice 修改程序的优先级
VIRT(virtual memory usage)
进程使用的虚拟内存
RES(resident memory usage)
进程使用的物理内存(不包括共享内存)
SHR(shared memory)
进程使用的共享内存
S
表示进程的运行状态,Z 表示该进程是僵尸进程
CPU
进程使用的CPU占比
MEM
进程使用的内存占比
TIME
进程启动后到现在所用的全部CPU时间
COMMAND
进程的启动命令(默认只显示二进制,top -c能够显示命令行和启动参数)
DATA
:数据占用的内存。如果top没有显示,按f键可以显示出来。这一块是真正的该程序要求的数据空间,是真正在运行中要使用的。
因此,DATA的含义比较确定,甚至可以用程序读取的数据量计算出来;SHR是一个潜在的可能会被共享的数字,如果只开一个程序,也没有别人共同使用它;VIRT里面的可能性更多,比如它可能计算了被许多X的库所共享的内存;RES应该是比较准确的,但不含有交换出去的空间;但基本可以说RES是程序当前使用的内存量。
交互式命令
- f或者F 从当前显示中添加或者删除项目
- o或者O 改变显示项目的顺序
- l 切换显示平均负载和启动时间信息
- m 切换显示内存信息
- t 切换显示进程和CPU状态信息
- c 切换显示命令名称和完整命令行
- M 根据驻留内存大小进行排序
- P 根据CPU使用百分比大小进行排序
- 按1切换过程查看单个 cpu详情模式
僵尸进程
如何查找僵尸(Defunct)进程
ps -ef | grep defunct | grep -v grep
消灭僵尸进程的方法
- 找到僵尸进程的父进程
pid
(pstress
可以显示进程父子关系),kill -9 pid
,父进程退出后init自动会清理僵尸进程。(需要注意的是kill -9
并不能杀死僵尸进程)
- 重启系统
其他
- btop 比 top 好用的资源监控器
- htop Linux信息工具介绍