top
作用
top命令经常用来监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况。
参数
- -h | -v: 显示帮助或者版本信息】
- -c: 命令行列显示程序名以及参数
- -d: 启动时设置刷新时间间隔
- -H: 设置线程模式
- -i: 只显示活跃进程
- -n: 显示指定数量的进程
- -p: 显示指定PID的进程
- -u: 显示指定用户的进程
视图参数含义

从上面的结果可以看出,top视图分为两部分:操作系统资源概况信息和进程信息。首先是分析资源概况中各个参数含义,再来分析进程信息中各个参数含义。
资源概况
a、操作系统时间、登录用户、负载情况 - top
top - 09:56:25 up 49 days, 15:19, 1 user, load average: 0.01, 0.05, 0.05
- 09:56:25:当前系统时间。
- up 49 days, 15:19:操作系统从开机后运行的时间,运行天时分。
- users:当前系统1个用户登录在线。
- load average:0,5,15min的系统平均负载。
b、运行任务概况 - tasks
Tasks: 147 total, 1 running, 146 sleeping, 0 stopped, 0 zombie
- total:系统当前运行进程数。
- running:当前运行的进程数。
- sleeping:睡眠中的进程数。
c、CPU概览: %Cpu(s) 表示CPU使用百分比,按照时间占用计算,单位s
%Cpu(s): 0.0 us, 0.8 sy, 0.0 ni, 99.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
- us:用户空间占用cpu时间百分比,如果是多核,这个数值表示占用的平均百分比,可以按1进行多核统计和平均统计切换。
- sy:内核空间占用cpu时间百分比,后续同上。
- ni:用户空间改变过优先级的进程占用cpu时间百分比。
- id:空闲时间占用cpu的百分比。
- wa:等待输入输出占用cpu时间百分比。
- hi:硬中断占用cpu时间百分比。
- si:软中断占用cpu时间百分比。
时间占用百分比=该种类型操作消耗cpu时间/top刷新间隔时间。top每3s刷新一次,用户空间进程在这3秒内试用了cpu时间1.5s,那么us为50%=1.5s/3s。
d、内存概览(KB)
KiB Mem : 32781220 total, 9375268 free, 10749464 used, 12656488 buff/cache
- total:内存总量。
- free:内存剩余总量。
- used:内存使用数量。
- buff/cached:用于缓冲的内存数量。
e、缓存区概况(KB)
KiB Swap: 0 total, 0 free, 0 used. 21365776 avail Mem
- total:交换区总量。
- free:空闲交换区数量。
- used:使用交换区数量。
进程概况
进程概况的统计是从多个维度进行展示的,其中几个计较重要的参数如下:
- PID:进程ID,唯一标识。
- USER:进程所属用户。
- %CPU:自上一次top刷新该进程的cpu占用时间百分比。
- %MEM:进程消耗内存百分比。
- TIME+:自进程开始以来,消耗CPU时间,单位1/100s。
其它参数可以在上面f键视图的全称中了解。
top视图中交互命令
1、全局
- Enter/Space:刷新视图。
- h:帮助信息,查询各个交互命令的含义。
- O:是否展示进程区域中的0值,比如%CPU是0的将全部隐藏。
- A:在全屏模式和多窗口选择模式中切换。
- d:设置刷新时间间隔。
- E:切换内存和交换区单位。
- H:开启/关闭线程模式,以线程的方式展示。
- k:杀掉指定进程或线程。
- Z:改变颜色配置。
- q:退出。
2、概要区域
- 1:显示CPU平均状态/分开显示各个逻辑CPU状态。
- m:切换显示内存统计的数据。
3、进程区域
- x:切换高亮行的排序位置。
- z:切换颜色。
- b:块状标记高亮行。
- c:切换显示命令/程序名和参数。
- f:显示field管理。
- u:按照执行用户显示进程。
- i:显示所有进程或活跃的进程。
- n:设置显示的进程数。
top常用场景
# 显示某个进程所有活跃的线程消耗情况
top -H -p pid
vmstat
作用
vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。相比top,可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)
使用
以上命令表示每隔2秒采样一次,一共采样3次,小面的每一行实际的数字就是每次采样的数据。
如果想在一段时间内连续监控,则不需要加采样次数的参数,就会一直采样,直至手动结束。
字段说明
procs-进程相关
r:表示运行和等待CPU时间片的进程数(就是说多少个进程真的分配到CPU),这个值如果长期大于系统CPU个数,说明CPU不足,需要增加CPU
b:显示多少进程在不可中断的休眠,表示在等待资源的进程数,比如正在等待I/O或者内存交换等。
memory—内存相关
swpd:表示切换到内存交换区的内存大小,即虚拟内存已使用的大小(单位KB),如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。
free:表示当前空闲的物理内存
buff:表示baffers cached内存大小,也就是缓冲大小,一般对块设备的读写才需要缓冲
Cache:表示page cached的内存大小,也就是缓存大小,一般作为文件系统进行缓冲,频繁访问的文件都会被缓存,如果cache值非常大说明缓存文件比较多,如果此时io中的bi比较小,说明文件系统效率比较好(Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用)
swap—交换分区
si:每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。
so:每秒虚拟内存写入磁盘的大小。
注意:一般情况下si、so的值都为0,如果si、so的值长期不为0,则说明系统内存不足,需要增加系统内存
io
bi:块设备每秒接收的块数量,即读磁盘,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,单位kb/s
bo:表示写到块设备数据的总量,即写磁盘,单位kb/s
注意:如果bi+bo的值过大,且wa值较大,则表示系统磁盘IO瓶颈
system
in:每秒CPU的中断次数,包括时间中断
cs:cpu每秒产生的上下文切换次数(cs自愿上下文切换\nvcs非自愿上下文切换)
例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。
