top
命令几乎是每个程序员都会用到的linux命令。这个命令用来查看linux系统的综合性能,比如cpu使用情况,内存使用情况。这个命令能帮助我快速定位程序的性能问题。
虽然这个命令很重要,但是之前对于这个命令的使用几乎仅限于查看下哪个进程使用的cpu最高,哪个进程占用的内存最高。对于输出的各个参数的含义也是一知半解,更不用说top
的一些高级用法了。
本篇博客就来具体分析下top
的详细使用方法。
top
输出参数的含义在linux终端输入top
,一般会有如下输出。
top - 15:34:12 up 127 days, 10:23, 2 users, load average: 0.04, 0.03, 0.00 tasks: 291 total, 1 running, 290 sleeping, 0 stopped, 0 zombie cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 98.3%id, 1.3%wa, 0.0%hi, 0.0%si, 0.0%st mem: 1792312k total, 288300k used, 1504012k free, 10384k buffers swap: 6291452k total, 5380k used, 6286072k free, 14128k cached pid user pr ni virt res shr s %cpu %mem time+ command 372007 root 20 0 15160 1336 888 r 0.3 0.1 0:00.33 top 1 root 20 0 19356 236 88 s 0.0 0.0 0:16.06 init ... 下面省略...
下面就对这些输出信息做下详细的说明
top
输出的第一行表示系统的运行时间和平均负载
top - 15:34:12 up 127 days, 10:23, 2 users, load average: 0.04, 0.03, 0.00
15:34:12
: 表示系统的当前时间是下午15点34分12秒;
up 127 days, 10:23
:表示这个linux系统已经启动127天多;
2 users
:表示当前有两个用户登陆系统,可以用who
命令查看具体是谁登陆了;
load average: 0.04, 0.03, 0.00
:最近1、5和15分钟内的平均负载
1. load average的含义
这里我们对这个laod average
指标做下详细说明。
laod average这个指标的含义:在特定时间间隔内运行队列中(在cpu上运行或者等待运行多少进程)的平均进
程数(状态是runnable和running的线程个数的和)。上面这个解释可能还是比较难理解。我们拿个实际的列子说明下。比如现在top命令有以下输出:
load average: 20.14, 22.03, 15.00
20.14 表示从当前时间到过去的一分钟内大概有 20.14个进程(线程)在等待cpu资源
22.03 表示从当前时间到过去的五分钟内大概有 22.03个进程(线程)在等待cpu资源
15.00 表示从当前时间到过去的十五分钟内大概有 15.00个进程(线程)在等待cpu资源
为了更好地理解这个负载的含义,下面列了一个交通流量的列子。
单核cpu可以想象成单车道
比如每个圆圈都是小汽车,第一种是满负荷但cpu时间片不用排队等待正好够用,第二种是%50空闲,第三个是超负荷50%,后面的就有队列等待了。
单核cpu,负载数值在0.00-1.00之间正常。
多核cpu可以想象成多车道
多核cpu的话,负载数值/cpu核数 在0.00-1.00之间表示正常。
现实生产中,不会让负载数值/cpu核数任意接近1的。一般当这个值达到0.8或者0.9时就需要分析分析原因了。当然这个也没有具体的定论,都是一家之言。
2. load average和cpu利用率的区别(这两个概念很重要,希望大家仔细看看)
先直接引用下中的截图
上面的列子对cpu使用个cpu做了比较好的解释,我自己也想了个列子,可能更加形象贴切。
其实,可以将cpu比喻成公司的厕所。比如说你所在的楼层有一个卫生间。每个卫生间有4个坑位(4核cpu)。一般早上的时候资源会比较紧张,在某个时间点,你做了一个统计,你发现在过去的1分钟,5分钟和15分钟内分别有6个人,8个人,8个人正在”使用“厕所(这里的人数包括等待上厕所和正在上厕所的人数),那儿此时公司厕所的负载就是6.00,8.00和8.00。通过上面的介绍我们发现此时公司厕所是过载的。(这个就是cpu负载的概念)
那么cpu使用又是什么意思呢?
还是以刚刚的厕所为列子。以现在的时间点到过去的15分钟内,你发现有3个同事用了其中一个坑位。时候你采访了下这个三个同事:在他们使用厕所的过程中多长时间是真的在上厕所?采访结果是:第一个同事2分钟上测试+3分钟玩手机,第二个同事1分钟上厕所+3分钟胡思乱想,第三个同事3分钟上厕所+3分钟玩手机。
那么这段时间内这个坑位的利用率就是(2+1+3)/15 = 40%
3. cpu负载和cpu使用率对我们的知道意义
上面只是列了一些比较常见的情况,具体问题还得具体分析。
tasks: 291 total, 1 running, 290 sleeping, 0 stopped, 0 zombie
tasks — 任务(进程),系统现在共有 291 个进程,其中处于运行中的有1个,290个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。
按 t 可以关闭显示这个任务信息,再按下 t 可以开启这个任务信息
cpu(s): 0.0%us, 0.3%sy, 0.0%ni, 98.3%id, 1.3%wa, 0.0%hi, 0.0%si, 0.0%st
在后台开发中需要关注us,sy,id,wa等常用指标。
按数字 1,可以查看cpu的核数和每个cpu的使用情况。
mem: 1792312k total, 288300k used, 1504012k free, 10384k buffers swap: 6291452k total, 5380k used, 6286072k free, 14128k cached
关于这些值表示的具体含义,我在我的博客linux 内存分析工具——free命令中详细分析过,大家可以参考。
pid user pr ni virt res shr s %cpu %mem time+ command 372007 root 20 0 15160 1336 888 r 0.3 0.1 0:00.33 top 1 root 20 0 19356 236 88 s 0.0 0.0 0:16.06 init
还有许多在默认情况下不会显示的输出,它们可以显示进程的页错误、有效组和组id和其他更多的信息。
按下 f 键盘可以调出更多显示选项。按esc键返回top显示页。
进入top页面后,我们可以进行一些交互操作。下面是一些交互键的说明:
如对本文有疑问, 点击进行留言回复!!
linux下文本编辑器vim的使用方法(复制、粘贴、替换、行号、撤销、多文件操作)
网友评论