Top命令详解
在Linux操作系统中,top是使用最频繁,也是比较全的一个命令。Top命令类似于Windows系统的任务管理器工具。它对于所有正在运行的进行和系统负荷提供不断更新的概览信息,包括系统负载、CPU利用分布情况、内存使用、每个进程的内容使用情况等信息。下面主要介绍一下top命令。
1、系统状态
top - 17:25:29 | 系统当前时间 |
up 43 days,41 min | 系统到目前为止已运行的时间 |
1 user | 当前登录系统的用户数量 |
load average: 0.20, 0.05, 0.01 | 系统负载(任务队列的平均长度),3个数值分别为1分钟、5分钟、15分钟前到现在的平均值 |
【提示】:top给出的系统运行时间,反应了当前系统存活多久,对于某些应用而言,系统需要保证7*24小时的高可用性,这个字段信息就能很好的衡量系统的高可用性。
2、Task 进程状态信息:
显示的是进程状态信息的汇总,分别对应:所有启动的进程数、正在运行的进程数、挂起的进程数、停止的进程数、僵尸进程数。
在linux操作系统中,一般有以下5种状态的进程信息:D:不可中断睡眠态(通常出现在IO阻塞)、R:运行态、S:睡眠态、T:已停止、z:僵尸态
3、Cpu
0.2%us | 用户空间占用CPU百分比 | 重点关注 |
0.1%sy | 内核空间占用CPU百分比 | 重点关注 |
0.0%ni | 用户进程空间内改变过优先级的进程占用CPU百分比 |
|
99.6%id | 空闲CPU百分比 | 重点关注 |
0.1%wa | 等待输入输入的CPU百分比 | 重点关注 |
0.0%hi | 硬中断占用CPU百分比 | 重点关注 |
0.0%si | 软中断CPU百分比 | 重点关注 |
0.0%st | 虚拟CPU等待实际CPU的时间的百分比。 |
|
一般我们关注多的是us、sy、id、wa、hi、wi这个6个数值,在这里我们需要注意的指标如下:
CPU(s):表示当前CPU的平均值,默认top命令配置显示的是平均的CPU使用情况,如果按下键盘1可以显示各颗逻辑CPU的使用情况,如下图所示:
- 统计空闲的CPU李永利我们直接统计%id的计数即可,当id持续过低的时候,表示系统迫切需要解决CPU资源问题。
- 统计使用的是CPU需要用1-%id获取。或者us+sy+si.
- wa:使用率过高的时候,我们需要考虑IO的性能是否有瓶颈,可以在使用iostat、sar等命令做进一步分析;
- hi:使用率过高时,表示当前硬件中断占用很大的百分比。一般硬件中断我们可以分析文件/proc/interrupts、/proc/irq/pid/smp_affinity、服务irqbalance是否配置,以及CPU的频率设置,通过这些可以帮系统打散优化系统的硬件中断。
- si:Linux kernel通过用一种软件的方法(可延迟函数)来模拟硬件的中断模式,通常叫做软中断。常见的软件中断一般都是和网络有关。从网卡到IP层的数据报文收发都是si处理的,长时间写日志也可能产生软件中断。
- 当软中断出现瓶颈的时候,系统有个进行叫ksoftirqd,每个CPU都有自己对应的ksoftirqd/n(n为CPU的逻辑ID),每个ksoftirqd的内核线程都会去运行对应的ksoftirqd(函数)来处理自己的中断队列上的软件中断。所以,当网络出现阻塞的时候,软件中断程序ksoftirqd肯定会出现瓶颈。此时我们可以通过ps aux|grep ksoftirqd查看ksoftirqd的瓶颈。
- Ni:优先级(priority)为操作系统用来决定CPU分类的参数,Linux使用(round-robin)的算法来做CPU排程,优先序越高,有可能获得的CPU时间就越多。但是我们可以通过nice命令以更改过的优先序来执行程序,如果未制定程序,则会打印出目前的排程优先序,内定的adjustment为10,范围为-20(最高优先序)到19(最低优先序)。
- Mem内存信息(物理内存)
物理内存总量、已经使用的物理内存、空闲物理内存、内核缓存内存量。
- 5、Swap交换内存(虚拟内存)
交换区总量、已使用交互区总量、空闲交换区总量、缓冲的交换区总量。
有以下结论可以帮助内存分析
- buffer和cache的作用是所用I/O系统调用的时间,比如读写等。一般一个系统而言,如果cache的值很大,说明cache住的文件多。如果频繁访问文件都能被命中,很明显会比读取磁盘调用快,磁盘的IO必定会减小。
注意:cache的命中率很关键,如果频繁访问的文件不能被命中,对于cache而言是个比较的大的资源浪费,此时应考虑drop cache并提升对应的cache的命中率。
(2)从字段的意义上来说mem.free表示的是空闲内存总量,但是需要注意的是,虽然buffer/cache会占用一定的物理内存,但是当系统需要内存的时候,这些内存立即释放出来,也就是说buffer/cache可以看成可用内存。
- 进程信息
PID | 进程ID |
USER | 进程所有者 |
PR | 优先级 |
NI | nice值,负值表示高优先级,正值表示低优先级 |
VIRT | 进程使用的虚拟内存总量,单位kb,VIRT=SWAP+RES |
RES | 进程使用的、未被换出的物理内存大小,单位kb,RES=CODE+DATA |
SHR | 共享内存大小,单位kb |
%CPU | 上传更新到现在的CPU时间占用百分比 |
%MEM | 进程使用的物理内存百分比 |
TIME+ | 进程使用的CPU时间总计,单位1/100秒 |
COMMAND | 命令名/命令行 |
注意如下:
- 在top命令中,第六、七行显示的是所有进程相关的信息,它默认显示的是进程的信息,如果要显示线程级的信息,可以通过ps命令获取。
- 进程实际使用的内容可以看RES那一列的信息,VIRT表示进程使用的是虚拟内存数据,SHR表示共享内存的数据。
- TIME+表示是进程使用的CPU时间总计,而非进程的存活时间。且TIME+默认精确到1/100秒。由于TIME+显示的是CPU时间,所以可能存在TIME+大于程序运行时间,也可能小于程序运行时间,这两没有必然的关系,无安全取决于该程序所能分配到的CPU时间而定。
- %CPU标识进程所占CPU的百分比,通过这个可以得出CPU利用率;
- 默认情况下系统不会显示进程分布在哪几颗逻辑CPU上,如果想分析各颗CPU对应的应用程序,可以修改top的默认配置,添加字段Last used CPU 即可。
- 默认的top命令配置并不能满足我们的日常需求时,我们可以自定义一些top配置,来更好的分析系统。用户输入top命令后,按下H键可以看到一应的top配置帮助页面:
常用的top修改配置如下:修改刷新间隔时间,添加字段、删除字段、排序、保存等:
Top间隔刷新:在top命令后,按下d键盘进入间隔刷新配置,输入间隔秒数即可。
添加进程字段显示列:
输入完top命令后,按下字母f,进入列配置页面,
选择前面对应的字母,如d,则会增加一列UID;变成大写字母表示显示,小写字母表示没有选择不显示;
显示平均/各颗CPU的利用率信息:
进入top命令后,输入数字1;再次按下数字1后,又恢复原来的平均的CPU信息。
需要注意的是,上面几种技巧因为没有加W保存,所以当用户退出top交互界面后,下次登录又会重新加载,,如果需要则输入W保存。
更多推荐
所有评论(0)