top
命令是Linux
下常用得性能分析工具,能够实时的显示系统中各个进程的资源占用状况,类似于平常使用的Windows
任务管理器,除此之外,top
还提供交互式的界面来筛选可用的信息。下面将分别介绍top
命令的输出以及常用操作
top
命令前五行的输出是当前系统情况整体的统计信息区
top - 20:12:44 up 2 days, 9:49, 9 users, load average: 0.83, 1.21, 1.58
Tasks: 370 total, 3 running, 367 sleeping, 0 stopped, 0 zombie
%Cpu(s): 9.7 us, 4.9 sy, 0.0 ni, 84.9 id, 0.0 wa, 0.0 hi, 0.4 si, 0.1 st
KiB Mem : 8173496 total, 657292 free, 5163996 used, 2352208 buff/cache
KiB Swap: 9437180 total, 7386364 free, 2050816 used. 2671772 avail Mem
top - 20:12:44 up 2 days, 9:49, 9 users, load average: 0.83, 1.21, 1.58
值 | 解释 |
---|---|
20:12:44 | 当前服务器时间 |
up 2 days, 9:49 | 系统启动了2天9小时49分钟 |
9 users | 当前有9个用户登录系统 |
load average: 1.15, 1.42, 1.44 | load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况 |
其中load average
代表系统负载,主要代表了在特定时间间隔内运行队列中(在CPU上运行或者等待运行多少进程)的平均进程数。
多核CPU的话,满负荷状态的数字为 “1.00 * CPU核数”,即双核CPU为2.00,四核CPU为4.00。
通过以下命令可查看CPU个数以及信息
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数
# 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数
# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq
# 查看逻辑CPU的个数
cat /proc/cpuinfo| grep "processor"| wc -l
取得CPU核心数目N,用对应时间的负载值 / N,如果得到的值小于0.7即可无忧。
例如现在我们是4个单核CPU,5分钟的负载值是1.21,用1.21 / 4 ≈ 0.3,说明机器复杂良好,当超过0.7的时候就需要关注看如何处理了
值 | 解释 |
---|---|
370 total | 系统目前进程总数 |
3 running | 运行状态态的进程数量 |
367 sleeping | 休眠状态的进程数量 |
0 stopped | 停止状态的进程数量 |
0 zombie | 僵尸状态的进程数量 |
系统现在共有370 个进程,其中处于运行中的有3个,367 个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。
%Cpu(s): 9.7 us, 4.9 sy, 0.0 ni, 84.9 id, 0.0 wa, 0.0 hi, 0.4 si, 0.1 st
值 | 解释 |
---|---|
9.7 us | user:用户空间占用CPU的百分比。 |
4.9 sy | system:内核空间占用CPU的百分比。 |
0.0 ni | nice:改变过优先级的进程占用CPU的百分比 |
84.9 id, | idle:空闲CPU百分比 |
0.0 wa | IO-wait:IO等待占用CPU的百分比(iowait) |
0.0 hi | 硬中断(Hardware IRQ)占用CPU的百分比 |
0.4 si | 软中断(Software Interrupts)占用CPU的百分比 |
0.1 st | 虚拟机管理程序从此虚拟机窃取的时间 |
KiB Mem : 8173496 total, 657292 free, 5163996 used, 2352208 buff/cache
值 | 解释 |
---|---|
8173496 total | 物理内存总量(≈8G) |
657292 free | 使用中的内存总量(≈0.6G) |
5163996 used | 空闲中的内存总量(≈4.9G) |
2352208 buff/cache | 缓存大小 |
KiB Swap: 9437180 total, 7386364 free, 2050816 used. 2671772 avail Mem
值 | 解释 |
---|---|
9437180 total | 交换区总量 |
7386364 free | 空闲交换区总量 |
2050816 used | 使用的交换区总量 |
2671772 avail Mem | 可用内存总量 |
注:各单位之间转换关系
KiB =千字节= 1024字节
MiB =兆字节= 1024 KiB = 1,048,576字节
GiB = gibibyte = 1024 MiB = 1,073,741,824字节
TiB = tebibyte = 1024 GiB = 1,099,511,627,776字节
PiB = pebibyte = 1024 TiB = 1,125,899,906,842,624字节
EiB = exbibyte = 1024 PiB = 1,152,921,504,606,846,976字节
介绍完上边的系统统计信息后,接下来就是各个进程的状态监控
字段 | 含义 |
---|---|
PID | 进程ID |
USER | 进程所有者 |
PR | 进程优先级(priority) |
NI | nice值,负值表示高优先级,正值表示低优先级 |
VIRT | 进程使用的虚拟内存总量 |
RES | 进程使用的、未被换出的物理内存大小 |
SHR | 共享内存大小 |
S | 进程状态(D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程) |
%CPU | 上次更新到现在的CPU时间占用百分比 |
%MEM | 进程使用的物理内存百分比 |
TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
COMMAND | 进程名称(命令名/命令行) |
对于上面的字段,单独区分下nice
值和priority
优先级。
PR (priority),被称为动态优先级,Priority/PRI 由 OS 内核动态调整,用户不能调整(PRI 值越低,进程执行的优先级越高),用户可通过调整 nice 值 来调整进程优先级,计算方式为:PRI(new) = PRI(old) + nice
NICE值用于表示进程优先级的修正数值,其取值范围是-20至19,一共40个级别,由于进程最终的优先级由 PRI + Nice 值共同决定,PRI又不能进行修改,那么就只能通过修改Nice值来影响进程优先级,对应的值越小代表优先级越高,也被称为静态优先级,可以通过renice
和 nice
命令修改
先单独介绍top
的命令参数,通过-h
查看常用的参数,更详细的还是参考man top
[root@suhaow ~]# top -h
procps-ng version 3.3.10
Usage:
top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]
参数 | 说明 |
---|---|
-d:Delay-time | 间隔秒数 |
-n:Number-of-iterations | 信息更新次数,次数达到退出 |
-u:User-filter-mode | 指定 用户 |
-p:Monitor-PIDs | 指定 pid |
-o:Override-sort-field | 指定 排序列 |
-w:Output-width-override | 输出宽度 |
输入top
命令后,再敲入h
可以查看互动命令,可以自己手动敲敲试试效果
Z,B,E,e Global: 'Z' colors; 'B' bold; 'E'/'e' summary/task memory scale
l,t,m Toggle Summary: 'l' load avg; 't' task/cpu stats; 'm' memory info
0,1,2,3,I Toggle: '0' zeros; '1/2/3' cpus or numa node views; 'I' Irix mode
f,F,X Fields: 'f'/'F' add/remove/order/sort; 'X' increase fixed-width
L,&,<,> . Locate: 'L'/'&' find/again; Move sort column: '<'/'>' left/right
R,H,V,J . Toggle: 'R' Sort; 'H' Threads; 'V' Forest view; 'J' Num justify
c,i,S,j . Toggle: 'c' Cmd name/line; 'i' Idle; 'S' Time; 'j' Str justify
x,y . Toggle highlights: 'x' sort field; 'y' running tasks
z,b . Toggle: 'z' color/mono; 'b' bold/reverse (only if 'x' or 'y')
u,U,o,O . Filter by: 'u'/'U' effective/any user; 'o'/'O' other criteria
n,#,^O . Set: 'n'/'#' max tasks displayed; Show: Ctrl+'O' other filter(s)
C,... . Toggle scroll coordinates msg for: up,down,left,right,home,end
k,r Manipulate tasks: 'k' kill; 'r' renice
d or s Set update interval
W,Y Write configuration file 'W'; Inspect other output 'Y'
q Quit
介绍上述中比较常用的几个互动命令:
~/.toprc
文件中除此之外还有一些对任务区域的操作,都可在man
手册中查看到
Task-Area-defaults
b - Bold hilite Off (use `reverse') # 高亮
* c - Command line Off (name, not cmdline) # 完整显示命令行
* i - Idle tasks On (show all tasks)
J - Num align right On (not left justify) # 数字是否右对齐
j - Str align right Off (not right justify) # 字符是否右对齐
R - Reverse sort On (pids high-to-low) # 反转排列顺序
* S - Cumulative time Off (no, dead children) # 累计时间
* u - User filter Off (show euid only) # 用户名过滤
* U - User filter Off (show any uid) #
V - Forest view On (show as branches) # 展示父子关系
x - Column hilite Off (no, sort field) #列高亮
y - Row hilite On (yes, running tasks) #行高亮
z - color/mono On (show colors) #变色
敲击键盘“b”(打开/关闭高亮效果),top的视图变化如下:
先敲击"b"(打开/关闭高亮效果),再敲击“x”(打开/关闭 排序列的加亮效果)
通过shift+<
向左改变排序列,shift+>
向右改变排序列,由上图可知道默认是按照CPU占用率排序,敲下shift+>
就选择了按照右侧的内存占用率进行排序
想改变排列数据敲"R"即可
通过top -c
参数进入到top
即可查看完整COMMAND
也可进入后直接敲"c"即可
先查询要观察进程的PID
[root@suhw ~]# ps aux|grep mysql
root 11500 0.0 0.0 112712 960 pts/2 S+ 11:24 0:00 grep --color=auto mysql
mysql 23679 1.2 0.8 3742680 140580 ? Ssl Jul20 13:16 /usr/sbin/mysqld
日后遇到常用的操作再继续添加。