文章目录
- 一、前言
- 二、Top说明
一、前言
TOP 命令是 Linux 常用的性能分析工具,能够实时显示系统中各个进程资源占用状况,类似于 Windows 的任务管理器。
二、Top说明
当使用一个工具时,对此最快的了解方式就是查看说明,那就是"man"。在此也不例外。
man top
通过上面的命令,可以看到下面的输出信息,这里只把最上面的 5 行信息中主要的给出了说明:
2. SUMMARY Display
Each of the following three areas are individually controlled through one or more interactive commands. See topic 4b. SUMMARY AREA
Commands for additional information regarding these provisions.
2a. UPTIME and LOAD Averages
This portion consists of a single line containing:
program or window name, depending on display mode
current time and length of time since last boot
total number of users
system load avg over the last 1, 5 and 15 minutes
2b. TASK and CPU States
This portion consists of a minimum of two lines. In an SMP environment, additional lines can reflect individual CPU state percent?
ages.
Line 1 shows total tasks or threads, depending on the state of the Threads-mode toggle. That total is further classified as:
running; sleeping; stopped; zombie
Line 2 shows CPU state percentages based on the interval since the last refresh.
As a default, percentages for these individual categories are displayed. Where two labels are shown below, those for more recent
kernel versions are shown first.
us, user : time running un-niced user processes
sy, system : time running kernel processes
ni, nice : time running niced user processes
id, idle : time spent in the kernel idle handler
wa, IO-wait : time waiting for I/O completion
hi : time spent servicing hardware interrupts
si : time spent servicing software interrupts
st : time stolen from this vm by the hypervisor
我们再来看一下具体输出:
第一行是任务队列信息,同uptime命令的执行结果。
19:15:01 #系统当前时间
up 85 days, 4:45, #系统运行时间,格式为 天,时:分
10 users, #当前登录用户数
load average: 17.94, 31.84, 38.98 #系统负载,即任务队列的平均长度。三个值分别为 1分钟,5分钟,15分钟前到现在的平均值。这里的Load指的出于R(running)和D(Uninterruptible sleep)的两种状态下的进程数,换句话说就是”运行状态或不可中断的状态“
对于这个 “load average” 理解为可以用下面一段图上的解释觉得是非常贴切的。
即在单核cpu情况下,load average 为1,表示cpu利用率为100,load average 为0.5的表示,其cpu利用率只有50%,load average为1.7说明,cpu已经超负荷 70%.
在多核 cpu 的机器上,需要将以上的1分钟/5分钟/15分钟的负载值除以对应的cpu核数,才好评估对应的 cpu 的负载情况。
比如,这个 cpu 为8核的机器上,其 cpu 过去一分钟的利用率只有 17.94/8=2.2425,说明 cpu 使用率已经超负荷了约124%
可以使用以下方法查看服务上cpu是几核:
[root@am ~]# cat /proc/cpuinfo |grep processor |wc -l
8
第二行:进程信息:
Tasks: #进程信息
439 total, #进程总数
1 running, #正在运行的进程数
437 sleeping, #睡眠的进程数
1 stopped, #停止的进程数
0 zombie # 僵尸进程数,一个parent的许多child都已经退出,但Parent还存在,且没有获取到child的状态之前的进程状态。
第三行:CPU信息
%Cpu(s):
84.7 us, #用户空间占用CPU百分比
7.6 sy, #内核空间占用CPU百分比
0.0 ni, #cpu的优先级,数据越高,说明越nice,在CPU调试时,nice越高的优先级越低,nice越低优先级越高。ni表示cpu在手动设置nice值的进程上执行所花的时间。
7.6 id, #空闲CPU百分比
0.0 wa, #等待输入输出的CPU时间百分比
0.0 hi, #硬件CPU中断占用百分比
0.0 si, #软中断占用百分比
0.0 st #虚拟机占用百分比,如果操作系统上部署的有虚拟机,那cpu会被虚拟机占用一定资源。此时,即便有其它进程需要资源,cpu也无法予以分配。相当于cpu资源给偷走了,所以st表示被偷走的时间,steal time.
第四行:内存信息
KiB Mem :
16265968 total, #物理内存总量
2337516 free, #空闲内存总量
12155956 used, #使用的物理内存总量
1772496 buff/cache #用作内核缓存的内存量
第五行:交换内存
KiB Swap:
8257532 total, #交换区总量
3308284 free, #空闲交换区总量
4949248 used. #使用的交换区总量
3446900 avail Mem #是创建新进程时,在不使用swap分区的情况下,能够分配的内存大小。这个大小可能比当前的free还大,这是因为buff/cache中的内存的创建进程时,若需要,也是可以抢占过来的。
任务区:
PID #进程id
USER #用户
PR #优先级
NI #nice值。负值表示高优先级,正值表示低优先级
VIRT #进程使用的虚拟内存总量
RES #进程使用的、未被换出的物理内存大小,单位kb.
SHR #共享内存大小,单位kb
S #进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
%CPU #使用CPU占用百分比
%MEM #进程使用物理内存百分比
TIME+ COMMAND #运行时间+命令名/行
进程排序
按以下大写字母,分别按不同的维度进行排序:
- M 根据内存使情况排序
- P 根据CPU使用情况排序
- N 根据进程ID排序
- T 根据进程使用CPU的时间排序
在性能排查中常用的命令:
top -H #默认显示进程的运行情况,在top命令执行后,按大写的H,可进入线程执行情况页面,再按一次H则会到进程展示。
top -c #在执行后,按小c,则能够展示进程路径,并且对内核进程的名称(command列),加上方括号。再按c切换回去
top -u root #在执行启动后,按小写u,在输入框中输入对应的用户名来过滤用户。
top 启动后,输入小k ,后面加pid 可以直接杀进程。
如何基于进程id,或程序名来查看资源占用情况:
ps aux |grep processName #找到对应进程pid
top -c -p pid #过滤查看进程的资源占用情况
基于表达式过滤进程:
在top启动后,按大O,进入到过滤表达式的输入框。表达式有以下几种类型:
COMMAND=getty #过滤条件命令行等于getty的显示
!COMMAND=getty #过滤条件命令行不等于getty的显示
%CPU>3.0 #CPU使用率超过3%的显示
其他:
top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
参数说明:
- d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
- q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
- c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称
- S : 累积模式,会将己完成或消失的子进程 ( dead child process ) 的 CPU time 累积起来
- s : 安全模式,将交谈式指令取消, 避免潜在的危机
- i : 不显示任何闲置 (idle) 或无用 (zombie) 的进程
- n : 更新的次数,完成后将会退出 top
- b : 批次档模式,搭配 “n” 参数一起使用,可以用来将 top 的结果输出到档案内