top 命令提供了正在运行的linux系统的动态实时的监控信息。常用与排查系统性能问题。

top常用命令

命令格式:
top [-] [d] [p] [q] [c] [C] [S] [n]
参数说明:
d: 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。 top -d 1 ,则top每隔1秒刷新显示一次
p: 通过指定监控进程ID来仅仅监控某个进程的状态。top -p 16091 只看某一个进程的
c: 显示整个命令行而不只是显示命令名

在top命令的显示窗口,我们还可以输入以下字母,进行一些交互:
h?: 显示帮助画面,给出一些简短的命令总结说明。
q: 退出程序。
M: 根据驻留内存大小进行排序。这个要记住
P: 根据CPU使用百分比大小进行排序。这个要记住
T: 根据时间/累计时间进行排序。

举例

1
top

top 命令区分为两个部分,上面为统计部分,下面为进程信息。

系统统计信息

第一行

top - 11:11:40 up 4 days, 20:30, 2 users, load average: 0.89, 0.96, 3.77

系统时间,已运行天数,登录用户数,1分钟,5分钟,15分钟系统平均负载

第二行

Tasks: 969 total, 2 running, 682 sleeping, 0 stopped, 1 zombie
运行的任务数,总量:969;运行中:2;睡眠:682;停止:0;僵尸进程:1;

第三行

%Cpu(s): 11.3 us, 6.2 sy, 0.0 ni, 82.3 id, 0.1 wa, 0.0 hi, 0.0 si, 0.0 st

us: (user)用户空间占用CPU百分比
sy: (system)系统空间占用CPU百分比
ni: (nice)改变过优先级的进程占用CPU百分比
id: (idle)处于空闲状态占用CPU百分比
hi: (Hardware interrputs) 硬中断占用CPU百分比
si: (Software interrputs) 软中断占用CPU百分比
st: (Steal Time) 虚拟机窃取CPU时间是虚拟 CPU 在管理程序为另一个虚拟处理器提供服务时等待真实 CPU 的时间百分比

需要关注 us, sy, wa 这3个值占用是否高。多少算高?us 一般超过75%就算高,sy 一般超过30%就算高,wa 超过5%就算高。

第四行

KiB Mem : 33008723+total, 24753566+free, 15236984 used, 67314576 buff/cache

total: 物理内存总量
free: 空闲内存
used: 已使用内存
buff/cache: 缓冲/缓存的内存

buffer: (写)缓冲区是系统两端处理速度的平衡。通常来说硬盘的写入的速度是性能瓶颈,引入缓冲区是为了减少短期内突发的I/O的影响。举个栗子,vim 编辑器并不是每输入一个字符就保存一次,默认是先保存到buffer中,用户触发 :w 命令进行保存时再写入到磁盘。
cache: (读)缓存区是处理两端速度不匹配的一种折中策略。主要原因是CPU和内存直接的速度差异越来越大。如果假的内存可以和CPU做的一样快,cache就可以不用了。

第五行

KiB Swap: 0 total, 0 free, 0 used. 31221619+avail Mem

Swap: 交换分区信息
total: 交换分区总量
free: 交换分区空闲
used: 已使用的空间
avail: 可用的交换分区

交换分区通常我们说的虚拟内存,是在硬盘中划分一个分区出来。当物理内存不够用的时候,内核就会释放 buffers/cache 里一些长时间不使用的程序,然后将这些程序临时放到 Swap 分区中。

进程信息

PID: 进程id
USER: 进程所有者用户名
PR: 优先级。数值越大优先级越高
NI: nice值,负值表示高优先级,正值表示低优先级
VIRT: 进程使用的虚拟内存总量,单位KB。VIRT=SWAP+RES
SWAP: 进程使用的虚拟内存中被换出的大小,单位KB
RES: 进程使用的、未被换出的物理内存大小,单位KB,RES=CODE+DATA
SHR: 共享内存大小,单位KB
S: 进程状态。D表示不可中断的睡眠状态;R表示运行;S表示睡眠;T表示跟踪/停止;Z表示僵尸进程。
%CPU: 上次更新到现在的CPU占用百分比
%MEM: 进程使用的物理内存百分比
TIME+: 进程使用的CPU时间总计,单位1/100秒
COMMAND: 命令名/命令行

参考文章