Linux命令:TOP
  EYmIKSPPfzd2 2023年12月08日 11 0

省流:

用一张图来解释top命令,它就是:

1.png

解释

Top 命令用于显示Linux的运行状态,它提供了一个动态的,实时的系统监控视图。

一般情况下,这个命令会展示系统运行状态和各线程任务运行状态。

在这篇博客中,我将逐条解释其中的对应信息。

输入

top

后,会进入交互式命令模式。

2.png

按下q退出。

上述内容:

top - 09:25:41 up 1 min,  3 users,  load average: 0.27, 0.11, 0.04
Tasks: 127 total,   1 running, 126 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   995488 total,   465908 free,   360852 used,   168728 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   488308 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                                                           
     1 root      20   0  193552   6664   4160 S   0.0  0.7   0:01.78 systemd                                                                                                                                                         
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kthreadd                                                                                                                                                                          
     3 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0                                                                                                                                                                       
     4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H                                                                                                                                                                      
     5 root      20   0       0      0      0 S   0.0  0.0   0:00.02 kworker/u256:0                                                                                                                                                                    
     6 root      20   0       0      0      0 S   0.0  0.0   0:00.04 ksoftirqd/0                                                                                                                                                                       
     7 root      rt   0       0      0      0 S   0.0  0.0   0:00.04 migration/0                                                                                                                                                                       
     8 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh                                                                                                                                                                            
     9 root      20   0       0      0      0 S   0.0  0.0   0:00.17 rcu_sched                                                                                                                                                                         
    10 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 lru-add-drain                                                                                                                                                                     
    11 root      rt   0       0      0      0 S   0.0  0.0   0:00.00 watchdog/0                                                                                                                                                                        
    12 root      rt   0       0      0      0 S   0.0  0.0   0:00.00 watchdog/1                                                                                                                                                                        
    13 root      rt   0       0      0      0 S   0.0  0.0   0:00.01 migration/1                                                                                                                                                                       
    14 root      20   0       0      0      0 S   0.0  0.0   0:00.01 ksoftirqd/1                                                                                                                                                                       
    15 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0                                                                                                                                                                       
    16 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/1:0H                                                                                                                                                                      
    18 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kdevtmpfs                                                                                                                                                                         
    19 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 netns                                                                                                                                                                             
    20 root      20   0       0      0      0 S   0.0  0.0   0:00.00 khungtaskd                                                                                                                                                                        
    21 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 writeback                                                                                                                                                                         
    22 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kintegrityd                                                                                                                                                                       
    23 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset                                                                                                                                                                            
    24 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset                                                                                                                                                                            
    25 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 bioset                                                                                                                                                                            
    26 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kblockd                                                                                                                                                                           
    27 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 md  

前五行是系统运行信息,后面是具体线程信息。

系统信息

第一行

top - 09:25:41 up 1 min,  3 users,  load average: 0.27, 0.11, 0.04

09:25:41:系统时间。

up 1 min:系统运行不到一分钟。

up 70 days, 16:44 :系统运行70天又16小时44分钟。

3 users:3个用户登录系统。

load average:0.27,0.11,0.04:系统1min,5min,15min的负载状况。

如果值大于5,则系统可能过载运行。

第二行

Tasks: 127 total,   1 running, 126 sleeping,   0 stopped,   0 zombie

总共运行了127个命令:1个运行中、126个休眠中、0个已结束和0个僵尸进程。

第三行

%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

0.0 us:用户空间占用CPU百分比。

0.0 sy:内核空间占用CPU百分比。

0.0ni:用户进程内改变过优先级的进程占用CPU百分比。

100.0 id:空闲CPU百分比。

我的CPU大部分处于空闲,因为我没有运行任何高CPU负载的任务。

0.0 wa:等待中CPU百分比(如果为高,则CPU正在等待I/O)。

0.0 hi:硬中断(Hardware IRQ)占用CPU的百分比。

0.0 si:软中断(Software Interrupts)占用CPU的百分比。

0.0 st:等待访问物理CPU的虚拟CPU时间百分比。

最后两行

KiB Mem :   995488 total,   465908 free,   360852 used,   168728 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   488308 avail Mem
KiB Mem

9955488 total:已消耗内存。

465908 free:可用内存。

360852 used:已消耗内存。

168728 buff/cache:要写入的缓冲信息量。

KiB Swap

2097148 total:交换空间内存总数。

2097148 free:可用交换空间内存。

==0 used:已使用交换空间内存。==

我们需要特别注意交换空间的已用内存(高亮部分)。

如果这个值不断变化,则证明内核和交换空间在不断交换内存,表明内存不足。

还需要注意KiB Mem中的free表示的是==未纳入内核管理的内存==,而不是实际空闲内存。

任务管理

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                                                                           
     1 root      20   0  193552   6664   4160 S   0.0  0.7   0:01.78 systemd                                                                                                                                                         
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kthreadd                                                                                                                                                                          
     3 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0                                                                                                                                    
     4 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
     
     ......

PID 进程id

USER 进程所有者的用户名

PR 优先级

NI Nice值,负值表示高优先级,正值表示低优先级

什么是Nice值

VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

SHR 共享内存大小,单位kb

S 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程

%CPU 上次更新到现在的CPU时间占用百分比

%MEM 进程使用的物理内存百分比

TIME+ 进程使用的CPU时间总计,单位1/100秒

COMMAND 命令名/命令行

进程状态

R 是 Running 或 Runnable 的缩写,表示进程在 CPU 的就绪队列中,正在运行或者正在等待运行。

D 是 Disk Sleep 的缩写,也就是不可中断状态睡眠(Uninterruptible Sleep),一般表示进程正在跟硬件交互,并且交互过程不允许被其他进程或中断打断。

Z 是 Zombie 的缩写,它表示僵尸进程,也就是进程实际上已经结束了,但是父进程还没有回收它的资源(比如进程的描述符、PID 等)。

S 是 Interruptible Sleep 的缩写,也就是可中断状态睡眠,表示进程因为等待某个事件而被系统挂起。当进程等待的事件发 生时,它会被唤醒并进入 R 状态。

I 是 Idle 的缩写,也就是空闲状态,用在不可中断睡眠的内核线程上。硬件交互导致的不可中断进程用 D 表示,但对某些内核线程来说,它们有可能实际上并没有任何负载,用 Idle 正是为了区分这种情况。D 状态的进程会导致平均负载升高, I 状态的进程却不会。

参数选项

top -d 3

设置更新时间为3秒(默认为5秒)。

top -n 2

最多显示两次刷新。

top -P

命令模式下的按键命令:

以下命令严格区分大小写。

?:显示在top当中可以输入的命令

P:以CPU的使用资源降序排序显示,默认

M:以内存的使用资源降序排序显示

N:以pid降序排序显示

T:由进程使用的时间累计排序显示

k:给某一个pid一个信号。可以用来杀死进程

r:给某个pid重新定制一个nice值(即优先级)

q:退出top(用ctrl+c也可以退出top)。

1:数字1,可以查看CPU核心的个数及详细信息。

排查高CPU占用基本思路(Java为例)

1.使用top命令,然后按P按照CPU使用率降序排序,找到占用CPU过高的进程id。

2.使用`ps -mp [进程id] -o THREAD,tid,time | sort -rm`获取线程信息,并找到占用CPU高的线程。

3.使用`echo 'obase=16;[线程id]' | bc`或`echo 'obase=16;[线程id]' | printf "%x\n" [线程id]`将线程ID转为16进制。

4.使用`jstack 进程id | grep "线程id的16进制" -A 30`打印线程的堆栈信息。

5.从堆栈信息中找到是程序中的那几行代码是一直处于running状态的,从而定位问题。

6.定位问题后,将进程结束。

学无止境

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月08日 0

暂无评论

推荐阅读
EYmIKSPPfzd2