一、前言
top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器,和它功能很像的一个命令是ps命令,但ps命令是静态的展示,也就是只展示某一时刻的进程情况。本文将来学习top命令的常用操作。
二、命令介绍
我们来看几个常用的参数:
top -c 显示进程完整的地址
top -I 忽略失效过程
top -s 保密模式
top -S 累积模式
top -d<秒数> 更新时间 -d 3 表示更新周期为3秒
top -i<时间> 设置间隔时间
top -u<用户名> 显示指定用户名
top -p<进程号> 显示指定进程
top -n<次数> 循环显示的次数 -n 2 表示更新两次后终止更新显示
三、实例
同样,我们结合实例来学习top命令。
1. 首先,我们看下默认情况下的top命令:
[mrzhang@192 ~]$ top
top - 15:59:17 up 18 min, 2 users, load average: 0.52, 0.67, 0.47
Tasks: 214 total, 1 running, 213 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.1 us, 1.0 sy, 0.0 ni, 95.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3823720 total, 1261872 free, 921608 used, 1640240 buff/cache
KiB Swap: 4063228 total, 4063228 free, 0 used. 2504904 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1513 root 20 0 288076 47052 22880 S 5.6 1.2 0:17.64 X
2097 mrzhang 20 0 2419744 126976 44664 S 4.0 3.3 0:41.45 gnome-shell
2752 mrzhang 20 0 708756 22852 14256 S 3.3 0.6 0:02.04 gnome-term+
3229 mrzhang 20 0 1916704 142064 55376 S 2.7 3.7 0:46.67 Web Content
前面五行是当前系统整体的统计信息,我们来挨个了解下:
- 第一行,任务队列信息:
15:59:17
,当前系统时间;up 18 min
,系统已经运行了多长时间(在此期间系统没有重启过),这里表示系统已经运行了18分钟;2 users
,表示当前用户登录的数量是2;load average: 0.52, 0.67, 0.47
,后面这三个参数分别是1分钟,5分钟,15分钟的负载情况,load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值,如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了;
- 第二行,Tasks,任务进程:
214 total, 1 running, 213 sleeping, 0 stopped, 0 zombie
,当前系统共有214个进程,其中处于运行的有1个,213个线程在休眠,stop状态的有0个,zombie状态的线程有0个;
- 第三行,CPU状态信息:
3.1 us, 1.0 sy, 0.0 ni, 95.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
,这里需要用户了解下Linux下的用户空间和内核空间:
3.1 us — 当前用户进程(未调整优先级)占用CPU的百分比
1.0 sy — 内核空间占用CPU的百分比。
0.0 ni — 已调整过优先级的进程占用CPU的百分比
95.9 id — 空闲CPU百分比
0.0 wa — IO等待占用CPU的百分比
0.0 hi — 硬件中断(Hardware IRQ)占用CPU的百分比
0.0 si — 软件中断(Software Interrupts)占用CPU的百分比
0.0 st (Steal Time),st 的全称是 Steal Time ,就是 Xen Hypervisor 分配给运行在其它虚拟机上的任务的实际CPU时间
- 第四行,内存状态,KiB Mem:
3823720 total, 1261872 free, 921608 used, 1640240 buff/cache
;total
, 物理内存总量;free
,空闲内存总量;used
,使用中的内存总量;buff/cache
,缓存的内存总量,单位都是KB;
- 第五行,swap交换分区信息,KiB Swap:
4063228 total, 4063228 free, 0 used. 2504904 avail Mem
;total
,交换区总量;used
,使用的交换区总量;free
,空闲交换区总量;avail Mem
,可用交换区总量;
后面的是进程的详细信息:
PID
,进程id;USER
,进程所有者;PR
,进程优先级;NI
,nice值,负值表示高优先级,正值表示低优先级;VIRT
,进程使用的虚拟内存总量,单位KB,VIRT=SWAP+RES;RES
,进程使用的、未被换出的物理内存大小,单位KB;SHR
,共享内存大小,单位KB;S
,进程状态,前文已经说过,D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程;%CPU
,上次更新到现在的CPU时间占用百分比;%MEM
,进程使用的物理内存百分比;TIME+
,进程使用的CPU时间总计,单位1/100秒;COMMAND
,进程名称(命令名/命令行);
top命令默认在一个特定间隔(5秒)后刷新显示。要手动刷新,用户可以输入回车或者空格。
2. 监控每个CPU的运行情况
在top视图中,我们通过按键1
可监控每个CPU的运行情况:
Tasks: 212 total, 1 running, 211 sleeping, 0 stopped, 0 zombie
%Cpu0 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 2.7 us, 1.4 sy, 0.0 ni, 95.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu2 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu3 : 1.4 us, 0.0 sy, 0.0 ni, 98.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3823720 total, 1100768 free, 1035412 used, 1687540 buff/cache
top命令展示的是逻辑CPU的个数,也就是物理CPU * CPU对应的内核数,不过有可能由于Intel的超线程技术,最终逻辑CPU的个数可能还需要 * 2。如果我们想查看服务器CPU的信息,可以通过 /proc/cpuinfo
进行查看。
这里我们可以看到我们的4个逻辑CPU的运行情况,再按1,将会返回top的基础视图。
3. 高亮显示当前运行线程
进行top基础视图后,点击键盘 b
,可以看到我们当前的进程被高亮了。而y
键则是控制开启或关闭正在运行的进程的加亮效果。
4. 查看目前进程的排序字段
默认情况下,我们进入top视图时,是根据CPU的占有率进行排序的。我们可以使用键盘x
来打开或这关闭排序列的高亮效果,top的视图变化为:
可以看到,目前top的排序字段是%CPU;
5. 借助Shift键来改变排序列
通过shift + >
或 shift + <
可以向右或左改变排序列:
6. 显示进程完整的地址
使用top -c
显示进程完整的地址:
KiB Swap: 4063228 total, 4063228 free, 0 used. 2231600 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1513 root 20 0 299464 55468 27924 S 6.0 1.5 0:46.08 /usr/bin/X :0 -background none -noreset -audit+
2097 mrzhang 20 0 2463300 156804 44756 S 5.6 4.1 2:00.73 /usr/bin/gnome-shell
2752 mrzhang 20 0 721504 25020 15384 S 3.0 0.7 0:10.82 /usr/libexec/gnome-terminal-server
3229 mrzhang 20 0 2012160 209220 67728 S 2.0 5.5 2:13.94 /usr/lib64/firefox/plugin-container -greomni /+
5650 mrzhang 20 0 157744 2376 1628 R 0.7 0.1 0:01.40 top -c
小命令:在top视图中,可以使用shift + j
或者j
来控制左右对齐。
7. 显示进程信息的其他字段:
进入top视图后,我们点击f
键,这时进入另一个视图,在这里可以设置基本视图中显示的字段:
Fields Management for window 1:Def, whose current sort field is PPID
Navigate with Up/Dn, Right selects for move then <enter> or Left commits,
'd' or <space> toggles display, 's' sets sort. Use 'q' or <esc> to end!
* PID = Process Id PGRP = Process Group Id vMj = Major Faults delta
* USER = Effective User Name TTY = Controlling Tty vMn = Minor Faults delta
* PR = Priority TPGID = Tty Process Grp Id USED = Res+Swap Size (KiB)
* NI = Nice Value SID = Session Id nsIPC = IPC namespace Inode
* VIRT = Virtual Image (KiB) nTH = Number of Threads nsMNT = MNT namespace Inode
* RES = Resident Size (KiB) P = Last Used Cpu (SMP) nsNET = NET namespace Inode
* SHR = Shared Memory (KiB) TIME = CPU Time nsPID = PID namespace Inode
* S = Process Status SWAP = Swapped Size (KiB) nsUSER = USER namespace Inode
* %CPU = CPU Usage CODE = Code Size (KiB) nsUTS = UTS namespace Inode
* %MEM = Memory Usage (RES) DATA = Data+Stack (KiB)
* TIME+ = CPU Time, hundredths nMaj = Major Page Faults
* COMMAND = Command Name/Line nMin = Minor Page Faults
PPID = Parent Process pid nDRT = Dirty Pages Count
UID = Effective User Id WCHAN = Sleeping in Function
RUID = Real User Id Flags = Task Flags <sched.h>
RUSER = Real User Name CGROUPS = Control Groups
SUID = Saved User Id SUPGIDS = Supp Groups IDs
SUSER = Saved User Name SUPGRPS = Supp Groups Names
GID = Group Id TGID = Thread Group Id
GROUP = Group Name ENVIRON = Environment vars
[mrzhang@192 ~]$
前面加 * 号的表示是显示在基础视图中的,我们如果要显示或不显示某些字段,在选中字段上,敲击d
即可实现。
8. 切换交替显示模式
进入top视图后,键入A
,显示:
这里会展示类似4个窗口,窗口的左上角有4个选项:Def(默认字段组) ,Job (任务字段组),Mem(内存字段组),Usr(用户字段组),四组字段共有一个独立的可配置的概括区域和它自己的可配置任务区域。我们可以使用a
和w
来进行切换,a
移动到后一个窗口,w
移动到前一个窗口,用g
命令可以输入一个数字来选择当前窗口。
四、top交互命令
在top的视图中,我们可以使用一些交换命令来帮助我们进行操作,这些命令都是单个英文字母,如果在命令行中使用了s 选项, 其中一些命令可能会被屏蔽。我们来了解下:
h 显示帮助画面,给出一些简短的命令总结说明
k 终止一个进程;
c 显示进程启动时的完整路径和程序名
i 切换显示空闲任务进程
q 退出程序
r 重新安排一个进程的优先级别
S 切换到累计模式
d或者s 设置显示的刷新间隔(单位为s),当敲下该键后,你会被提示输入一个值,然后这个设置的值将会作为刷新时间,输入0值则系统将不断刷新,默认值是5s
l 切换显示平均负载和启动时间信息
m 切换显示内存信息
t 切换显示进程和CPU状态信息
c 切换显示命令名称和完整命令行
A 切换交替显示模式
M 根据驻留内存大小进行排序
P 根据CPU使用百分比大小进行排序
T 根据时间/累计时间进行排序
W 将当前设置写入~/.toprc文件中
B 粗体显示一些重要命令信息
R 反向排序
Z 改变颜色
f或F 从当前显示中添加或者删除项目
o或O 改变显示项目的顺序
到这,我们学习了top命令大部分的功能,如有需要,大家可以参考下面链接学习更多内容,另外,有兴趣的童鞋可以了解下htop命令。
网友评论