linux学习之top命令详解

参考文章 https://blog.csdn.net/langzi6/article/details/124805024

top

第一行:运行时长,负载

top - 10:04:54 up 474 days, 22:16,  2 users,  load average: 2.07, 1.60, 0.94

top - 10:04:54:当前时间。
up 474 days, 22:16:系统已经运行的时长。
2 users:当前有2个用户登录到系统上。
load average: 2.07, 1.60, 0.94:系统在过去1分钟、5分钟和15分钟内的平均负载值。

这里具体需要关注的还是load average三个数值。先来说说定义吧:在一段时间内,CPU正在处理以及等待CPU处理的进程数之和。三个数字分别代表了1分钟,5分钟,15分钟的统计值,这个数值的确能反应服务器的负载情况。但是,这个数值高了也并不能直接代表这台机器的性能有问题,可能是因为正在进行CPU密集型的计算,也有可能是因为I/O问题导致运行队列堵了。所以,当我们看到这个数值飙升的时候,还得具体问题具体分析。大家都知道,一个CPU在一个时间片里面只能运行一个进程,CPU核数的多少直接影响到这台机器在同时间能运行的进程数。所以一般来说Load Average的数值别超过这台机器的总核数,就基本没啥问题。

我这台机器是16核32线程 

 第二行:任务列表

Tasks: 394 total,   2 running, 392 sleeping,   0 stopped,   0 zombie

Tasks:总共有393个进程。
running:其中有2个进程正在运行。
sleeping:有391个进程睡眠。
stopped:没有任何进程被停止。
zombie:没有任何僵死进程(Zombie Process)。

第三行:CPU使用情况

%Cpu(s):  3.8 us,  0.6 sy,  0.0 ni, 95.5 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st

%Cpu(s):指示各种CPU时间的使用百分比。
us:用户空间占比。(像shell程序、各种语言的编译器、各种应用、web服务器和各种桌面应用都算是运行在用户地址空间的进程,这些程序如果不是处于idle状态,那么绝大多数的CPU时间都是运行在用户态)
sy:内核空间占比。所有进程要使用的系统资源都是由Linux内核处理的,对于操作系统的设计来说,消耗在内核态的时间应该是越少越好,在实践中有一类典型的情况会使sy变大,那就是大量的IO操作,因此在调查IO相关的问题时需要着重关注它)
ni:用于调整进程优先级的用户进程空间占用率 (nice value) 。 0%
id:表示CPU空闲的时间占比。95.5%
wa:表示等待IO操作的时间占比。(和CPU的处理速度相比,磁盘IO操作是非常慢的,有很多这样的操作,比如,CPU在启动一个磁盘读写操作后,需要等待磁盘读写操作的结果。在磁盘读写操作完成前,CPU只能处于空闲状态。Linux系统在计算系统平均负载时会把CPU等待IO操作的时间也计算进去,所以在我们看到系统平均负载过高时,可以通过wa来判断系统的性能瓶颈是不是过多的IO操作造成的)
hi:表示硬中断请求的时间占比。
si:表示软中断请求的时间占比。 0.1%
st:如果为假,则没有任何虚拟机需要被置换。 如果为真,则某些虚拟机被压缩。

第四五行:内存使用情况

KiB Mem : 12944240+total, 54553152 free, 18052124 used, 56837132 buff/cache

KiB Swap:        0 total,        0 free,        0 used. 10732576+avail Mem 

和free -m对比看下
                    total            used          free      shared  buff/cache   available
Mem:         126408       18266       52625         442       55516      107342
Swap:             0           0           0

MiB Mem:显示物理内存的使用情况。
total:总物理内存。12944240kb  126408MB=129441792kb=123G
free:空闲物理内存。54553152kb  52625MB=53888000kb
used:已使用的物理内存。 反正大差不差。
buff/cache:被高速缓存使用的内存量。
MiB Swap:显示交换分区的使用情况。
total:总交换分区大小。
free:空闲交换分区大小。
used:已使用的交换分区大小。
avail Mem:剩余可用内存。

第四第五行分别是内存信息和swap信息,所有程序的运行都是在内存中进行的,所以内存的性能对与服务器来说非常重要。不过当内存的free变少的时候,其实我们并不需要太紧张。真正需要看的是Swap中的used信息。Swap分区是由硬盘提供的交换区,当物理内存不够用的时候,操作系统才会把暂时不用的数据放到Swap中。所以当这个数值变高的时候,说明内存是真的不够用了

这句话尤其注意,刚好今天抖音看了一个生产案例,就是说应用程序每次fullgc需要20s,之前不管他,后来发现越来越频繁一周好几次fullgc,发现每次fullgc的时候swap区的内存会减少,说明之前应用内存不够了,直接把一些数据存放到swap,在fullgc的时候需要清楚swap区的数据会浪费很多时间,后来他禁用了swap区,fullgc直接就降到100ms了。

第六行包括后续 进程列表:

PID:进程ID号。
USER:进程所有者的用户名。 --看是哪个用户启动的,看着有点用
PR:进程优先级。 --没啥用
NI:进程的nice值,用于调整进程的优先级。--没啥用
VIRT:进程占用的虚拟内存大小。 --有用
RES:进程占用的物理内存的大小。-- 有用
SHR:共享内存大小。
S:进程状态 (D=不可中断的睡眠状态, R=运行, S=睡眠, T=跟踪/停止, Z=僵尸进程)。
%CPU:该进程当前占用CPU的时间百分比。
%MEM:该进程占用物理内存的百分比。
TIME+:该进程占用CPU的总时间。
COMMAND:命令名称和参数。

以第一条

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND           
 2695 kudu      20   0 4523184 1.206g  24900 S  40.0  1.0  77725:46 kudu-tserver

pid=2695  用户是kudu  进程优先级是20 NI是0 

虚拟内存VIRT=4523184kb=4.3g

物理内存RES=1.2G

共享内存=24MB

进程当前占用cpu的时间比为40%

进程占用内存的百分比为1.0%

该进程占用cpu的总时间是77725分钟46s

使用命令是kudu-tserver

上面是基础,大致了解了top命令各自代表的是啥,下面稍微深入一下如何使用top命令。

3.1. 更改显示内容

top之后我们按f可以自定义显示内容。比如这两个优先级有啥用啊,一辈子可能都用不到。 

 top后按F 出现以下页面 说明目前是按照cpu排序的,我不想看优先级,还想看下ppid

这里也说了使用方法,按d或空格去选择或取消指定展示列,按s去排序,按q或esc

 最后我们设置好了

3.2、top常用参数

要看使用方法少不了-h

(base) [devuser@cdp-node13 ~]$ top -help
  procps-ng version 3.3.10
Usage:
  top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]

说实话这个-h也很垃圾,直接看别人博客吧。

-d    指定每两次屏幕信息刷新之间的时间间隔,如希望每秒刷新一次,则使用:top -d 1
-p    通过指定PID来仅仅监控某个进程的状态 top -p pid1 -p pid2
-S    指定累计模式
-s    使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险
-i    使top不显示任何闲置或者僵死的进程
-c    显示整个命令行而不只是显示命令名 这个还挺有用的
例如:

top   每隔3秒显式所有进程的资源占用情况
top -d 1  每隔1秒显式所有进程的资源占用情况
top -c    每隔3秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名)
top -p 28820 -p 38830   每隔3秒显示pid是28820和pid是38830的两个进程的资源占用情况
top -d 2 -c -p 69358  每隔2秒显示pid是69358的进程的资源使用情况,并显式该进程启动的命令行

3.3、top的交互命令

【1】敲top后,按键盘数字“1”可以监控每个逻辑CPU的状况:

【2】敲top后,输入u,然后输入用户名,则可以查看相应的用户进程;

 

 【3】敲top后,top命令默认以K为单位显示内存大小,我们可以通过大写字母E来切换内存信息区域的显示单位,如下按一下E切换到MB,再按以下切换到GB

默认kb

 按一下E切换的MB

 按两下E切换到GB

【4】敲top后,输入h进入top命令的帮助文档,了解更多关于top的用法。

好吧 我还以为top -h就可以了。原来是我狭隘了。

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值