Linux 性能分析之top命令详解

这篇具有很好参考价值的文章主要介绍了Linux 性能分析之top命令详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Linux 性能分析之top命令详解

概述

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,其作用类似于windows系统中的任务管理器。

linux top 负载情况,工具,linux

top命令可以动态显示系统的负载情况,本文将详细介绍top命令的方方面面。

常用参数

top命令支持一些参数,下面是一些常用的参数:

  • -d:设置刷新频率。
  • -n:设置刷新的次数。
  • -p:显示指定进程的信息。
  • -u:显示指定用户的进程信息。
  • -o:指定排序字段。
  • -h:显示帮助信息。

显示每 2 秒刷新一次且仅刷新 10 次的进程信息:

top -d 2 -n 10

显示指定用户 root 的进程信息:

top -u root

显示指定进程 ID 为 123 的信息:

top -p 123

以内存使用率排序:

top -o %MEM

top命令内容

通常top命令的输出如下所示,它包含了很多方面的数据,例如CPU,内存,系统的任务等等数据。

top - 10:32:42 up 38 min,  2 users,  load average: 0.00, 0.00, 0.00
Tasks: 237 total,   1 running, 236 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.4 sy,  0.0 ni, 99.1 id,  0.0 wa,  0.1 hi,  0.1 si,  0.0 st
MiB Mem :   3635.0 total,   3229.8 free,    441.0 used,    170.1 buff/cache
MiB Swap:   2072.0 total,   2072.0 free,      0.0 used.   3194.0 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
   1461 root      20   0    7252   3672   3280 S   0.7   0.1   0:00.03 bash
   1621 root      20   0   10700   4360   3476 R   0.7   0.1   0:00.05 top
   1477 root      20   0       0      0      0 I   0.3   0.0   0:00.01 kworker/0:0-events
      1 root      20   0  103372  12748   9724 S   0.0   0.3   0:02.18 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.04 kthreadd
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp
      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp
      5 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 slub_flushwq
      6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 netns
      8 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-events_highpri
     10 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:1H-events_highpri
     11 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_percpu_wq
     13 root      20   0       0      0      0 I   0.0   0.0   0:00.00 rcu_tasks_kthre

下面便一行一行的看看top命令的数据。

第一行其实代表了系统的启动时间和系统的平均负载。

top - 10:32:42 up 38 min,  2 users,  load average: 0.00, 0.00, 0.00

top - 10:32:42 up 38 min 代表当前系统的时间是10:32:42,并且该机器已经启动了38 min2 users代表当前有两个用户登录。load average: 0.00, 0.00, 0.00代表的是系统最近5、10和15分钟内的平均负载。

这里需要注意的是平均负载并不是代表CPU的使用率。简单来说,平均负载是指单位时间内,系统处于可运行状态不可中断状态的平均进程数,也就是平均活跃进程数

所谓可运行状态和不可中断状态是指:

  • 可运行状态®:正在CPU上运行或者正在等待CPU的进程状态,如上;
  • 不可中断状态(D):不可中断是指一些正在处于内核关键流程的进程,如果盲目打断,会造成不可预知的后果,比如正在写磁盘的进程,盲目被打断,可能会造成读写不一致的问题。

因此这里再次强调load average和CPU使用率并没有直接关系,其值可以大于100。

其实第一行的显示数据和命令uptime的作用是一样的。

第二行显示的是关于进程状态的总结。

进程可以处于不同的状态,这里显示了处于各种状态的进程数量,例如正在运行的任务、睡眠的任务、停止的任务、僵尸进程的数量等。

在下面的显示中, 系统总共有237个进程,其中1个进程处于running状态,236个进程处于sleeping状态,0个进程处于stop状态,0个进程处于僵尸进程状态。

Tasks: 237 total,   1 running, 236 sleeping,   0 stopped,   0 zombie

第三行是比较关键的一行,线上定位问题的时候,会经常关注这个点。

%Cpu(s):  0.3 us,  0.4 sy,  0.0 ni, 99.1 id,  0.0 wa,  0.1 hi,  0.1 si,  0.0 st

这里的每一个参数的含义如下所示:

  • us, user: 用户空间的CPU百分比
  • sy,system: 内核空间占用的CPU百分比
  • ni,niced:调整过优先级的用户进程占用CPU百分比
  • id,idle: 空闲CPU的百分比
  • wa,IO wait: 用于等待IO完成的CPU时间
  • hi:处理硬件中断的CPU时间
  • si: 处理软件中断的CPU时间
  • st:这个虚拟机被hypervisor偷去的CPU时间(译注:如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)。

第四部分是关于内存部分的数据。这里包含了两行,

第一行是物理内存的使用情况,第二行是关于交换分区的使用情况。

MiB Mem :   3635.0 total,   3229.8 free,    441.0 used,    170.1 buff/cache
MiB Swap:   2072.0 total,   2072.0 free,      0.0 used.   3194.0 avail Mem

第一行的含义如下:

  • 3635.0 total — 物理内存总量(3265MB )
  • 3229.8 free — 空闲的内存总量( 3229.8MB )
  • 441.0 used — 使用中的内存总量( 441.0MB )
  • 170.1 buff/cache — block buffer + page cache 所占用的内存大小 (169M)

这里补充一句buff/cache的内容,在Linux 2.4以前,page cachebuffer cache是两个独立的缓存,Linux 2.4开始page cachebuffer cache进行了统一。

第二行的含义如下:

  • 2072.0 total - 交换分区的总量
  • 2072.0 free - 空闲的交换分区的总量
  • 0.0 used - 已使用的交换分区大小
  • 3194.0 avail Mem: 这个值是系统的估算值,表示可用于启动新程序的物理内存大小(不包括 swap 空间)

第五部分是关于每个进程的数据

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
   1461 root      20   0    7252   3672   3280 S   0.7   0.1   0:00.03 bash
   1621 root      20   0   10700   4360   3476 R   0.7   0.1   0:00.05 top
   1477 root      20   0       0      0      0 I   0.3   0.0   0:00.01 kworker/0:0-events
      1 root      20   0  103372  12748   9724 S   0.0   0.3   0:02.18 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.04 kthreadd
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp

在横向列出的系统属性和状态下面,是以列显示的进程。不同的列代表下面要解释的不同属性。

  • PID:进程ID,进程的唯一标识符
  • USER:进程所有者的实际用户名。
  • PR:进程的调度优先级。这个字段的一些值是’rt’。这意味这这些进程运行在实时态。
  • NI:进程的nice值(优先级)。NI的值处于[-20, 19],越小的值意味着越高的优先级。
  • VIRT:进程使用的虚拟内存。默认是KB。
  • RES:驻留内存大小。驻留内存是任务使用的非交换物理内存大小,默认是KB。
  • SHR:SHR是进程使用的共享内存,默认是KB。
  • S:这个是进程的状态。它有以下不同的值:
    • D – 不可中断的睡眠态。
    • R – 运行态
    • S – 睡眠态
    • T – 被跟踪或已停止
    • Z – 僵尸态
  • CPU:自从上一次更新时到现在任务所使用的CPU时间百分比。
  • MEM:进程使用的可用物理内存百分比。
  • TIME:任务启动后到现在所使用的全部CPU时间,精确到百分之一秒。
  • COMMAND:运行进程所使用的命令。

使用技巧

多核CPU监控

在top的基本视图中,按数字1,可以监控每个逻辑CPU的状况,例如下面的例子,我的虚拟机包含了4个cpu,这里显示了4个CPU的运行状况。

top - 13:35:11 up  3:40,  2 users,  load average: 0.00, 0.02, 0.00
Tasks: 234 total,   1 running, 233 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.3 us,  0.7 sy,  0.0 ni, 98.7 id,  0.0 wa,  0.3 hi,  0.0 si,  0.0 st
%Cpu1  :  0.7 us,  0.3 sy,  0.0 ni, 98.7 id,  0.0 wa,  0.0 hi,  0.3 si,  0.0 st
%Cpu2  :  0.3 us,  0.7 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   3635.0 total,   3188.5 free,    461.1 used,    209.5 buff/cache
MiB Swap:   2072.0 total,   2072.0 free,      0.0 used.   3173.9 avail Mem

切换内存的单位

  • 切换任务区的内存单位

在top的基本试图中,按字母e,可以切换每个任务占用内存的大小的单位, 从 KB、MB、GB、TB、PB 到 EB 循环切换。下面切换为了以MB为单位:

top - 14:45:06 up  4:59,  1 user,  load average: 0.02, 0.01, 0.00
Tasks: 228 total,   2 running, 226 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.3 sy,  0.0 ni, 99.2 id,  0.0 wa,  0.1 hi,  0.1 si,  0.0 st
MiB Mem :   3635.0 total,   3193.4 free,    454.6 used,    211.3 buff/cache
MiB Swap:   2072.0 total,   2072.0 free,      0.0 used.   3180.4 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
  94996 root      20   0   10.4m   4.3m   3.4m R   0.7   0.1   0:00.05 top
   1712 root      20   0    0.0m   0.0m   0.0m I   0.3   0.0   0:35.48 kworker/0:0-events
      1 root      20   0  165.1m  12.5m   9.6m S   0.0   0.3   1:38.13 systemd
      2 root      20   0    0.0m   0.0m   0.0m S   0.0   0.0   0:00.05 kthreadd
      3 root       0 -20    0.0m   0.0m   0.0m I   0.0   0.0   0:00.00 rcu_gp
      4 root       0 -20    0.0m   0.0m   0.0m I   0.0   0.0   0:00.00 rcu_par_gp
  • 切换汇总区的内存单位
    使用大小字母E,可以实现汇总区域的内存的单位从 KB、MB、GB、TB、PB 到 EB 循环切换。
top - 14:54:18 up  5:08,  1 user,  load average: 0.02, 0.02, 0.00
Tasks: 227 total,   2 running, 225 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.4 sy,  0.0 ni, 99.1 id,  0.0 wa,  0.1 hi,  0.1 si,  0.0 st
KiB Mem :  3722236 total,  3268096 free,   467500 used,   216364 buff/cache
KiB Swap:  2121724 total,  2121724 free,        0 used.  3254736 avail Mem

top - 14:54:34 up  5:08,  1 user,  load average: 0.02, 0.02, 0.00
Tasks: 227 total,   1 running, 226 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.4 us,  0.4 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st
MiB Mem :   3635.0 total,   3186.9 free,    461.2 used,    211.3 buff/cache
MiB Swap:   2072.0 total,   2072.0 free,      0.0 used.   3173.8 avail Mem

top - 14:54:44 up  5:08,  1 user,  load average: 0.01, 0.02, 0.00
Tasks: 227 total,   1 running, 226 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
GiB Mem :      3.5 total,      3.1 free,      0.4 used,      0.2 buff/cache
GiB Swap:      2.0 total,      2.0 free,      0.0 used.      3.1 avail Mem

限制展示任务的数量

快捷键 n 用于限制要展示的任务的数量,0 表示无限制。默认是全部展示(超过一页需要翻页)。

这里输入n之后,再输入5,选择只显示5条记录

top - 14:47:34 up  5:01,  1 user,  load average: 0.05, 0.03, 0.00
Tasks: 227 total,   1 running, 226 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.5 us,  1.5 sy,  0.0 ni, 97.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   3635.0 total,   3187.3 free,    460.8 used,    211.3 buff/cache
MiB Swap:   2072.0 total,   2072.0 free,      0.0 used.   3174.2 avail Mem
Maximum tasks = 0, change to (0 is unlimited)5
    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
      1 root      20   0  169040  12832   9800 S   0.0   0.3   1:38.14 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.05 kthreadd

显示如下:

top - 14:48:16 up  5:02,  1 user,  load average: 0.02, 0.02, 0.00
Tasks: 228 total,   1 running, 227 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  0.5 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.1 hi,  0.1 si,  0.0 st
MiB Mem :   3635.0 total,   3190.8 free,    457.2 used,    211.3 buff/cache
MiB Swap:   2072.0 total,   2072.0 free,      0.0 used.   3177.8 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
   1386 root      20   0   84320  22744  19808 S   0.3   0.6   0:00.09 smbd
   1514 root      20   0    7252   3696   3304 S   0.3   0.1   0:51.33 bash
  90783 root      20   0       0      0      0 I   0.3   0.0   0:00.02 kworker/2:2-mm_percpu_wq
  95906 root      20   0   10700   4356   3472 R   0.3   0.1   0:00.05 top
      1 root      20   0  169040  12832   9800 S   0.0   0.3   1:38.14 systemd

只展示指定用户的任务

快捷键 u 表示要过滤的用户,可以加 ! 前缀表示反向条件。可以输入 UID 或者 username,直接回车表示取消这个过滤条件。

top - 14:49:30 up  5:03,  1 user,  load average: 0.00, 0.02, 0.00
Tasks: 229 total,   2 running, 227 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.5 us,  0.4 sy,  0.0 ni, 98.9 id,  0.0 wa,  0.1 hi,  0.1 si,  0.0 st
MiB Mem :   3635.0 total,   3190.0 free,    458.0 used,    211.3 buff/cache
MiB Swap:   2072.0 total,   2072.0 free,      0.0 used.   3177.0 avail Mem
Which user (blank for all) root
    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
     46 root      20   0       0      0      0 S   0.3   0.0   0:00.28 kcompactd0
   1454 root      20   0   19112   7260   5176 S   0.3   0.2   0:33.76 sshd
   1514 root      20   0    7252   3696   3304 S   0.3   0.1   0:51.54 bash

按照CPU占用量进行排序

运行top命令后,键入大写字母P,可以对任务的CPU使用情况进行排序,有两种途径:

  • 打开大写键盘的情况下,直接按p
  • 为打开大写键盘的情况下,shift+p。
top - 15:01:01 up  5:15,  1 user,  load average: 0.02, 0.03, 0.00
Tasks: 228 total,   2 running, 226 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.8 us,  2.8 sy,  0.0 ni, 94.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   3635.0 total,   3189.3 free,    458.8 used,    211.3 buff/cache
MiB Swap:   2072.0 total,   2072.0 free,      0.0 used.   3176.2 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    727 root      20   0   26128   9688   8596 S   7.4   0.3   0:00.16 systemd-journal
  99654 root      20   0   10700   4356   3476 R   3.7   0.1   0:00.74 top
      1 root      20   0  169040  12832   9800 S   0.0   0.3   1:38.14 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.05 kthreadd
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp

按照任务的内存使用量进行排序

运行top命令后,键入大写字母M,可以对任务的CPU使用情况进行排序,有两种途径:

  • 打开大写键盘的情况下,直接按m
  • 为打开大写键盘的情况下,shift+m。
top - 15:02:25 up  5:16,  1 user,  load average: 0.00, 0.02, 0.00
Tasks: 229 total,   1 running, 228 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.4 us,  0.4 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.1 hi,  0.1 si,  0.0 st
MiB Mem :   3635.0 total,   3187.3 free,    460.8 used,    211.3 buff/cache
MiB Swap:   2072.0 total,   2072.0 free,      0.0 used.   3174.2 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
   1386 root      20   0   84320  22744  19808 S   0.0   0.6   0:00.09 smbd
    813 root      20   0  257068  21184  16536 S   0.0   0.6   0:01.22 NetworkManager
    872 root      20   0   72880  17140  14664 S   0.0   0.5   0:00.62 nmbd
      1 root      20   0  169040  12832   9800 S   0.0   0.3   1:38.14 systemd
   1436 root      20   0   18764  12060  10248 S   0.0   0.3   0:00.03 sshd
   1433 root      20   0   18756  12036  10184 S   0.0   0.3   0:00.04 sshd

top交互模式下查看帮助

在交互模式下,敲入h可以查看帮助信息:

linux top 负载情况,工具,linux文章来源地址https://www.toymoban.com/news/detail-736424.html

到了这里,关于Linux 性能分析之top命令详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux - top命令详解(监视进程和Linux整体性能)

    top :运行基本top命令,显示所有进程信息,5秒刷新一次,根据使用占比%CPU排序 top -c :显示整个命令行而不是整个命令名 top -d secs :表示进程界面更新时间(默认5秒) top -n max :循环显示的次数 top -u|U user :指定用户名信息 top -p pid(s) :查看指定进程信息 top -b :批次档模

    2024年02月16日
    浏览(56)
  • Linux超全整理Linux性能分析工具汇总

    出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章。本文也可以作为检验基础知识的指标,另外文章涵盖了一个系统的方方面面。如果没有完善的计算机系统知识,网络知识和操作系统知识,文档中的工具,是不可能完全掌握的,另外对系统性能

    2024年02月07日
    浏览(44)
  • Linux性能分析工具Perf简单教程

    *以下操作基于Ubuntu-22.04.2 LST 1. 安装Perf 打开一个命令终端,并运行以下命令,这个命令需要sudo或者root权限。如果系统提示缺省其他的依赖库,则一并安装即可。 2. Perf简介 Perf是基于Linux内核perf_events接口实现的性能分析工具。我们可以用它来分析一个程序的性能,找出影响

    2024年03月13日
    浏览(63)
  • Linux 中 top信息详解,CPU负载详解

     一、top信息的三个参数到底是什么意思? 6.68、7.67、8.08 分别代表前一分钟,五分钟,十五分钟的平均CPU负载,最重要的指标是最后一个数字,即前15分钟的平均CPU负载,这个数字越小越好。所谓CPU负载指的是一段时间内任务队列的长度,通俗的讲,就是一段时间内一共有多

    2024年02月15日
    浏览(40)
  • 超全整理!Linux性能分析工具汇总合集

    高能预警:文章涵盖了一个系统的方方面面,如果没有完善的 计算机系统知识、网络知识 和 操作系统知识 ,文档中的工具是不可能完全掌握的,另外,对系统性能分析和优化是一个长期的过程。 本文主要是结合Linux 大牛,Netflix 高级性能架构师 Brendan Gregg 更新 Linux 性能调

    2024年02月08日
    浏览(49)
  • 在Linux下做性能分析1:基本模型

    ==介绍== 本Blog开始介绍一下在Linux分析性能瓶颈的基本方法。主要围绕一个基本的分析模型,介绍perf和ftrace的使用技巧,然后东一扒子,西一扒子,逮到什么说什么,也不一定会严谨。主要是把这个领域的一些思路和技巧串起来。如果读者来讨论得多,我们就讨论深入一点,

    2024年02月16日
    浏览(41)
  • Linux服务器的性能监控与分析

     如上图所示,我们在命令vmstat后面添加了两个参数,1表示间隔一秒获取一次,10表示总共获取10次 我们一列一列数据来看: r:代表目前实际运行的指令队列,很高表示CPU很繁忙通常会CPU使用率过高 这个数据如果高于服务器CPU核数就可能出现瓶颈(需要结合后五列CPU使用百

    2024年02月12日
    浏览(46)
  • linux下性能分析工具Perf安装与用法

    目录 1、Perf介绍 2、火焰图分类  (1)CPU  (2)Memory Flame Graphs  (3)Off-CPU Flame Graphs  (4)Hot/Cold Flame Graphs  (5)Differential  3、火焰图安装命令 (1)安装Perf工具 (2)下载可视化工具FlameGraph  4、火焰图demo测试 (1)生成CPU火焰图1 (2)火焰图表解析 (3)当前程序图标

    2024年02月04日
    浏览(43)
  • Linux性能分析工具perf和火焰图使用方法

    perf是linux上的性能分析工具,perf可以对event进行统计得到event的发生次数,或者对event进行采样,得到每次event发生时的相关数据(cpu、进程id、运行栈等),利用这些数据来对程序性能进行分析。 perf可以统计或采样的event有很多,如果我们要分析cpu,那么我们可以使用cpu-cycles、

    2024年01月16日
    浏览(61)
  • Linux的服务器日志分析及性能调优

    作为网络安全和数据传输的重要环节,代理服务器在现代互联网中扮演着至关重要的角色。然而,在高负载情况下,代理服务器可能面临性能瓶颈和效率问题。本文将介绍如何利用Linux系统对代理服务器进行日志分析,并提供一些实用技巧来优化其性能。 1. 日志收集与分析

    2024年02月10日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包