大家好,我是高胜寒,今天我们来聊聊在系统管理中的另外一个命令-top命令。
top命令是我们在日常工作中用的比较多的一个,学会使用top,就相当于有了一把趁手的兵器,上可九天揽月,下可五洋捉鳖。
先睹为快:
1. 执行完top命令之后,显示结果如下图,参数较多,我们细细道来
我把开头的五行截图下来:
2. 第一行的含义:
load average详解
load average: 指的是平均负载,在Linux当中,就是系统负载的平均值,它主要是将正在运行的线程对系统的需求显示为平均运行数和等待线程数。
如果平均值为0.0 表示系统处于空闲状态。
一般很多工具在使用这个load average的时候都会选择1分钟,5分钟和15分钟的平均值, 这里有个技巧:
-** 如果1min平均值高于5分钟或者15分钟的平均值,表示负载在增加 **
- 如果1分钟平均值低于5分或者15分钟的平均值,表示负载在减少。
通过上面的技巧我们很容易判断当前负载是在持续增加还是减少,如果持续增加我们只需要判断当前是否达到了最大负载的阈值, 持续减少,我们几乎不用再去介入,当然你想去研究下为什么15分钟之前的负载突然增高了,也是可以的。
有很多论文上说,这里的load averages指的是系统负载,但我们达不到应用层,所以还是认为是cpu的负载吧。
load averages反应的是cpu的负载,其实是不准确的, 准确的说,load averages 反应的是System load averages. 检测的是正在运行和等待运行的线程数,包括cpu,磁盘,不间断锁等等。
我们可以这么理解:
当load averages较高的情况下,说明等待运行的任务比较低多,因此轮到该任务运行的等待时间就会出现较大延迟,然后反应在负载上就成了负载变高
经验值:
单核心,1分钟的系统平均负载不要超过3,就是ok的。
所以:
注:这里的cpu核心指的是逻辑核心数
怎么查看逻辑核心数?
方法一:
使用top命令,进入后,按1就可以看到cpu核心数。
方法二:
代码语言:javascript复制[root@zmgaosh ~]# cat /proc/cpuinfo | grep ‘processor’ | sort | uniq | wc -l 2
3. 第二行和第三行的含义
4. 内存信息:第四行和第五行的详细信息
进程信息(第7行)
1)每列的含义
参数详解
面试题:VIRT ,RES,SHR这三个值分别代表什么?
VIRT:virtual memory usage 虚拟内存 1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等 2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量 RES:resident memory usage 常驻内存 1、进程当前使用的内存大小,但不包括swap out 2、包含其他进程的共享 3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反 4、关于库占用内存的情况,它只统计加载的库文件所占内存大小 SHR:shared memory 共享内存 1、除了自身进程的共享内存,也包括其他进程的共享内存 2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小 3、计算某个进程所占的物理内存大小公式:RES – SHR 4、swap out后,它将会降下来
其实知道了这三个值代表什么也并没什么用,最重要的是需要知道下面这句话:
VIRT值最高的进程就是内存使用最多的进程
如果服务器特别卡,你用top排查,那个VIRT数值最大的进程就是元凶,抓住它
top常用的快捷键
默认3s刷新一次,按s修改刷新时间
top常用举例:
1) 找出系统中使用cpu最多的进程
运行top , 找出使用CPU最多的进程 ,按大写的P,可以按CPU使用率来排序显示
2) 查看gaosh用户的进程内存使用情况
[root@zmgaosh ~]# top -u gaosh
3) 修改成5秒刷新一次
代码语言:javascript复制top -d 5
4) 监控指定进程,比如监控PID为1225的进程
[root@zmgaosh ~]# top -p 1225
总结:
top 命令是我们日常工作中用的比较多的一个命令, 学会看几个重要的参数即可,比如load averages,比如查看占用内存最多的进程等