linux-性能优化命令

top

我们先来说说top命令用法,这个命令对于我们监控linux性能是至关重要的,我们先来看看展示结果。

复制代码
top - 15:20:23 up 10 min,  2 users,  load average: 0.39, 0.53, 0.35
Tasks: 217 total,   1 running, 216 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
MiB Mem :   3889.8 total,   2242.3 free,    996.8 used,    650.7 buff/cache
MiB Swap:   3891.0 total,   3891.0 free,      0.0 used.   2663.3 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
      1 root      20   0  166328  11484   8168 S   0.0   0.3   0:02.93 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.02 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 netns
      7 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-events_highpri
      9 root       0 -20       0      0      0 I   0.0   0.0   0:00.32 kworker/0:1H-events_highpri
     10 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_percpu_wq
     11 root      20   0       0      0      0 S   0.0   0.0   0:00.00 rcu_tasks_rude_
     12 root      20   0       0      0      0 S   0.0   0.0   0:00.00 rcu_tasks_trace
     13 root      20   0       0      0      0 S   0.0   0.0   0:00.22 ksoftirqd/0
     14 root      20   0       0      0      0 I   0.0   0.0   0:00.51 rcu_sched
     15 root      rt   0       0      0      0 S   0.0   0.0   0:00.00 migration/0
     16 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 idle_inject/0
     17 root      20   0       0      0      0 I   0.0   0.0   0:01.44 kworker/0:1-pm
     18 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/0
     19 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/1
     20 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 idle_inject/1
     21 root      rt   0       0      0      0 S   0.0   0.0   0:00.70 migration/1
     22 root      20   0       0      0      0 S   0.0   0.0   0:00.13 ksoftirqd/1
     24 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/1:0H-events_highpri
     25 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kdevtmpfs
     26 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 inet_frag_wq
     27 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kauditd
     28 root      20   0       0      0      0 I   0.0   0.0   0:00.97 kworker/0:2-events                                               
     29 root      20   0       0      0      0 S   0.0   0.0   0:00.00 khungtaskd  

我们先来看看第一部分内容
1.1,第一行系统整体的统计

  • 15:20:23 是当前时间

  • up 10 min 运行了多久

  • 2 users 当前登录的用户数

  • load average: 0.39, 0.53, 0.35 系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值

    load average:重点说明一下,我们主要观看15min的负载,每个cpu负载应该控制在0-1。如果是0说明cpu在没有任务在执行,
    如果是1cpu已经跑满了,而大于1的时候,就有任务等待的请求。
    通常如果这个指标长时间大于cpu的核心数,表示cpu很累,需要排查。

1.2,第二行进程数的统计信息

  • Tasks: 217 total 进程总数 217
  • 1 running 正在运行的进程数 1
  • 216 sleeping 睡眠的进程数 216
  • 0 stopped 停止的进程数 0
  • 0 zombie 僵死进程数 0

1.3,第三行cpu的统计信息

  • 0.0 us 用户空间占用CPU百分比

    解释:进程在用户地址空间中消耗CPU时间的百分比。像shell程序、各种语言的编译器、数据库应用、web服务器和各种桌面应用都算
    是运行在用户地址空间的进程,这些程序如果不是处于idle状态,那么绝大多数的CPU时间都是运行在用户态。

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

    解释:进程在内核地址空间中消耗CPU时间的百分比。所有进程要使用的系统资源都是由Linux内核处理的。当处于
    用户态(用户地址空间)的进程需要使用系统的资源时,比如需要分配一些内存、或是执行IO操作、再或者是去创建一个子进程,
    此时就会进入内核态(内核地址空间)运行。事实上,决定进程在下一时刻是否会被运行的进程调度程序就运行在内核态。
    对于操作系统的设计来说,消耗在内核态的时间应该是越少越好,在实践中有一类典型的情况会使sy变大,那就是大量的IO操作,
    因此在调查IO相关的问题时需要着重关注它。

  • 0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比

    解释:ni是nice的缩写,可以通过nice值调整进程用户态的优先级,这里显示的ni表示调整过nice值的进程消耗掉的CPU时间。
    如果系统中没有进程被调整过nice值,那么ni就显示为0

  • 100.0 id 空闲CPU百分比

  • 0.0% wa 等待输入输出的CPU时间百分比

    解释:CPU等待磁盘IO操作的时间。和CPU的处理速度相比,磁盘IO操作是非常慢的,有很多这样的操作,比如:CPU在启动一个磁盘
    读写操作后,需要等待磁盘读写操作的结果。在磁盘读写操作完成前,CPU只能处于空闲状态。Linux系统在计算系统平均负载时会
    把CPU等待IO操作的时间也计算进去,所以在我们看到系统平均负载过高时,可以通过wa来判断系统的性能瓶颈是不是过多的IO操作
    造成的。

  • 0.0% hi 硬中断占用百分比

  • 0.0% si 软中断占用百分比

    解释:这两个值表示系统处理中断消耗的时间。中断分为硬中断和软中断,hi表示处理硬中断消耗的时间,si表示处理软中
    断消耗的时间。硬中断是硬盘、网卡等硬件设备发送给CPU的中断消息,当CPU收到中断消息后需要进行适当的处理(消耗CPU时间)。
    软中断是由程序发出的中断,最终也会执行相应的处理程序(消耗CPU时间)

1.4最后两行的统计信息如下

  • 3889.8 tota 物理内存总量

  • 2242.3 free 使用的物理内存总量

  • 996.8 used 空闲的内存总量

  • 650.7 buff/cache 用作内核缓存的内存量

  • 3891.0 total 交换区内存总量

  • 3891.0 free 使用的交换区总量

  • 0.0 used 空闲的交换区总量

  • 2663.3 avail Mem 缓冲的交换区总量

    如果在内存充足的情况下,交换内存应该是很小的。
    for i in cd /proc;ls |grep "^[0-9]"|awk ' $0 >100' ;do awk '/Swap:/{aa=a+2}END{print '"i"',a/1024"M"}'
    /proc/$i/smaps ;done |sort -k2nr
    这个命令可以查看占用交换内存的进程。

2,进程的统计信息

序号 列名 含义
1 PID 进程id
2 USER 进程所有者的用户名
3 PR 优先级
4 NI nice值。负值表示高优先级,正值表示低优先级
5 VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
6 RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
7 SHR 共享内存大小,单位kb
8 S 进程状态(D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程)
9 %CPU 进程使用的CPU的百分比
10 %MEM 进程使用的物理内存百分比
11 TIME+ 进程使用的CPU时间总计,单位1/100秒
12 COMMAND 执行的命令

3.1,top命令的使用方式

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

3.2,top命令使用举例

  • 3.2.1 top //每隔3秒显式所有进程的资源占用情况

    top - 06:57:27 up 4:41, 4 users, load average: 0.02, 0.10, 0.09
    Tasks: 223 total, 1 running, 222 sleeping, 0 stopped, 0 zombie
    %Cpu(s): 2.1 us, 6.6 sy, 0.0 ni, 91.2 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st
    MiB Mem : 3889.8 total, 1874.0 free, 1035.0 used, 980.8 buff/cache
    MiB Swap: 3891.0 total, 3891.0 free, 0.0 used. 2618.3 avail Mem

    复制代码
      PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                      
     1845 root      20   0   17724  11852   8908 S   4.7   0.3   3:48.73 sshd                                                                                         

    181935 root 20 0 17580 11788 8912 S 2.0 0.3 0:00.21 sshd
    41828 root 20 0 10912 4208 3336 S 0.7 0.1 1:08.00 top
    182120 root 20 0 11320 4436 3052 S 0.7 0.1 0:00.06 top
    211 root -51 0 0 0 0 S 0.3 0.0 0:06.72 irq/16-vmwgfx
    530 root rt 0 354884 27100 9072 S 0.3 0.7 0:03.39 multipathd
    2013 root 20 0 11320 4316 2936 S 0.3 0.1 1:28.70 top
    119765 root 20 0 0 0 0 I 0.3 0.0 0:06.08 kworker/0:2-events
    180210 root 20 0 0 0 0 I 0.3 0.0 0:00.11 kworker/u256:0-events_power_efficient
    182141 root 20 0 10612 4076 3232 R 0.3 0.1 0:00.04 top

  • 3.2.2 top -d 1 //每隔1秒显式所有进程的资源占用情况,默认是3s

  • 3.2.3 top -c //每隔1秒显式所有进程的资源占用情况

    top - 06:57:27 up 4:41, 4 users, load average: 0.02, 0.10, 0.09
    Tasks: 223 total, 1 running, 222 sleeping, 0 stopped, 0 zombie
    %Cpu(s): 2.1 us, 6.6 sy, 0.0 ni, 91.2 id, 0.0 wa, 0.0 hi, 0.2 si, 0.0 st
    MiB Mem : 3889.8 total, 1874.0 free, 1035.0 used, 980.8 buff/cache
    MiB Swap: 3891.0 total, 3891.0 free, 0.0 used. 2618.3 avail Mem
    top - 07:01:09 up 4:45, 4 users, load average: 0.38, 0.22, 0.13
    Tasks: 223 total, 1 running, 222 sleeping, 0 stopped, 0 zombie
    %Cpu(s): 1.7 us, 4.7 sy, 0.0 ni, 93.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
    MiB Mem : 3889.8 total, 1872.6 free, 1036.3 used, 981.0 buff/cache
    MiB Swap: 3891.0 total, 3891.0 free, 0.0 used. 2616.9 avail Mem

    复制代码
      PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                      
     2013 root      20   0   11320   4316   2936 S   1.3   0.1   1:29.82 top                                                                                          
     1845 root      20   0   17724  11852   8908 S   1.0   0.3   3:51.78 sshd: root@pts/0,pts/1                                                                       

    181935 root 20 0 17712 11828 8912 S 1.0 0.3 0:03.54 sshd: root@pts/2,pts/3
    15240 root 20 0 0 0 0 I 0.3 0.0 0:14.51 [kworker/1:0-events]
    119765 root 20 0 0 0 0 I 0.3 0.0 0:06.25 [kworker/0:2-events]
    160236 root 20 0 0 0 0 I 0.3 0.0 0:01.05 [kworker/u256:1-events_power_efficient]
    182120 root 20 0 11320 4436 3052 S 0.3 0.1 0:01.25 top
    1 root 20 0 167692 12840 8080 S 0.0 0.3 0:04.12 /sbin/init

  • 3.2.4 top -p 12345 //每隔3秒显示pid是12345进程的资源占用情况

    top - 07:03:03 up 4:47, 4 users, load average: 0.08, 0.16, 0.11
    Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
    %Cpu(s): 1.4 us, 3.9 sy, 0.0 ni, 94.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
    MiB Mem : 3889.8 total, 1868.4 free, 1040.4 used, 981.0 buff/cache
    MiB Swap: 3891.0 total, 3891.0 free, 0.0 used. 2612.9 avail Mem

    复制代码
      PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                      
     8170 root      20   0 3692372 625916  17444 S   0.7  15.7   1:36.95 java   

3.3,top的交互命令

  • 3.3.1 过滤用户:在top命令显示中,输入u,然后输入用户名,则可以查看相应的用户进程。如按u键,然后输入tiger,按回车则只显示tiger的进程

  • 3.3.2 查看各个CPU的使用情况:在top命令下,输入1,可以看到各个CPU的使用情况

    top - 07:06:07 up 4:50, 4 users, load average: 0.27, 0.19, 0.12
    Tasks: 224 total, 1 running, 223 sleeping, 0 stopped, 0 zombie
    %Cpu0 : 1.7 us, 3.7 sy, 0.0 ni, 94.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
    %Cpu1 : 1.0 us, 3.3 sy, 0.0 ni, 95.3 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
    MiB Mem : 3889.8 total, 1871.3 free, 1037.4 used, 981.1 buff/cache
    MiB Swap: 3891.0 total, 3891.0 free, 0.0 used. 2615.8 avail Mem

    复制代码
      PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                      

    181935 root 20 0 17712 11860 8912 S 1.3 0.3 0:07.59 sshd
    1845 root 20 0 17724 11868 8908 S 0.7 0.3 3:55.58 sshd
    2013 root 20 0 11320 4316 2936 S 0.7 0.1 1:31.30 top

  • 3.3.3 隐藏闲置或僵死的进程:在top命令下,输入i,可以隐藏闲置或僵死的进程,效果跟输入top -i是一样的

    top - 07:07:31 up 4:51, 4 users, load average: 0.11, 0.16, 0.12
    Tasks: 220 total, 1 running, 219 sleeping, 0 stopped, 0 zombie
    %Cpu0 : 2.0 us, 4.4 sy, 0.0 ni, 93.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
    %Cpu1 : 2.7 us, 5.6 sy, 0.0 ni, 91.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
    MiB Mem : 3889.8 total, 1876.0 free, 1032.6 used, 981.2 buff/cache
    MiB Swap: 3891.0 total, 3891.0 free, 0.0 used. 2620.6 avail Mem

    复制代码
      PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                      
     1845 root      20   0   17724  11868   8908 S   1.3   0.3   3:56.73 sshd                                                                                         

    181935 root 20 0 17712 11860 8912 S 1.0 0.3 0:08.66 sshd
    2013 root 20 0 11320 4316 2936 S 0.7 0.1 1:31.81 top
    182120 root 20 0 11320 4436 3052 S 0.7 0.1 0:03.43 top
    8170 root 20 0 3692372 625916 17444 S 0.3 15.7 1:37.83 java

  • 3.3.4 切换进程列表中的内存显示单位:在进程列表中,内存的单位默认也是KB,我们可以通过小写字母e来切换单位,下面是mb的单位

    top - 07:08:34 up 4:52, 4 users, load average: 0.12, 0.16, 0.12
    Tasks: 224 total, 1 running, 223 sleeping, 0 stopped, 0 zombie
    %Cpu0 : 1.0 us, 3.7 sy, 0.0 ni, 95.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
    %Cpu1 : 1.7 us, 3.0 sy, 0.0 ni, 95.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
    MiB Mem : 3889.8 total, 1882.5 free, 1026.1 used, 981.2 buff/cache
    MiB Swap: 3891.0 total, 3891.0 free, 0.0 used. 2627.1 avail Mem

    复制代码
      PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                      
     1845 root      20   0   17.3m  11.6m   8.7m S   0.7   0.3   3:57.61 sshd                                                                                         
     2013 root      20   0   11.1m   4.2m   2.9m S   0.7   0.1   1:32.20 top                                                                                          
    41828 root      20   0   10.7m   4.1m   3.3m S   0.7   0.1   1:10.61 top                                                                                          

    181935 root 20 0 17.3m 11.6m 8.7m S 0.7 0.3 0:09.54 sshd
    769 root 20 0 307.5m 9.1m 7.5m S 0.3 0.2 0:30.60 vmtoolsd
    8170 root 20 0 3605.8m 611.2m 17.0m S 0.3 15.7 1:38.09 java

  • 3.3.5 粗体显示排序的列:由前文可知,f键可以改变排序的列,但界面中看不出是以哪个列来排序的,可以通过小写字母x来粗体显示当前排序的列

  • 3.3.6 快速切换排序的列:虽然可以通过f键来修改排序的列,但还有一些快速切换排序列的方式:比如大写字母M以%MEM列排序,大写字母N以PID列排序,大写字母P以%CPU列排序,大写字母T以TIME+列排序。大写字母R可以将当前的排序结果反转。

  • 3.3.7 显示完整的执行命令:默认COMMAND列只显示程序的名字,并不包含程序的路径,可以通过小写字母c来显示完整的执行命令(效果跟top -c相同)

vmstat

vmstat命令,是 Virtual Meomory Statistics(虚拟内存统计)的缩写,可用来监控 CPU 使用、进程状态、内存使用、虚拟内存使用、硬盘输入/输出状态等信息。此命令的基本格式有如下 2 种:

复制代码
vmstat [-a] [刷新延时 刷新次数]
vmstat [选项] 

-a 的含义是用 inact/active(活跃与否) 来取代 buff/cache 的内存输出信息。除此之外,表 1 罗列出了 vmstat 命令的第二种基本格式中常用的选项及各自的含义。

表3 vmstat命令常用选项及含义

选项 含义
-fs -f:显示从启动到目前为止,系统复制(fork)的程序数,此信息是从 /proc/stat 中的 processes 字段中取得的。-s:将从启动到目前为止,由一些事件导致的内存变化情况列表说明。
-S 单位 令输出的数据显示单位,例如用 K/M 取代 bytes 的容量。
-d 列出硬盘有关读写总量的统计表。
-p 分区设备文件名 查看硬盘分区的读写情况。

vmstat 1 20 ,如下显示

复制代码
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 1912344  47864 981132    0    0    20     9  155  256  1  3 95  0  0
 0  0      0 1911588  47864 981132    0    0     0     0  467  840  2  9 89  0  0
 0  0      0 1910832  47864 981132    0    0     0     0  449  615  4 11 86  0  0
 0  0      0 1910832  47872 981132    0    0     0    12  273  420  1  3 96  0  0
 1  0      0 1910584  47872 981132    0    0     0     0  418  704  2  7 91  0  0
 0  0      0 1910836  47872 981132    0    0     0     0  403  711  2  7 91  0  0
 0  0      0 1911092  47872 981132    0    0     0     0  233  399  1  1 98  0  0
 0  0      0 1910844  47872 981132    0    0     0     0  418  699  2  7 91  0  0
 3  0      0 1910848  47872 981132    0    0     0     4  388  610  2  7 92  0  0
 0  0      0 1910876  47872 981132    0    0     0     0  323  439  1  4 95  0  0
 0  0      0 1910624  47872 981132    0    0     0     0  389  755  3  5 92  0  0
 2  0      0 1910876  47872 981132    0    0     0     0  361 1236  4  6 91  0  0
 0  0      0 1911388  47872 981132    0    0     0     0  374  614  3  7 91  0  0
 0  0      0 1911388  47872 981132    0    0     0     0  440  706  2  6 92  0  0
  • procs 进程信息
字段 含义
r 等待运行的进程数,数量越大,系统越繁忙。
b 不可被唤醒的进程数量,数量越大,系统越繁忙。
  • memory 内存信息,切换单位 -S mb
字段 含义
swpd 虚拟内存的使用情况,单位为 KB。
free 空闲的内存容量,单位为 KB。
buff 缓冲的内存容量,单位为 KB。
cache 缓存的内存容量,单位为 KB。
  • swap 交换分区信息,这两个数越大,表明数据需要经常在磁盘和内存之间进行交换,系统性能越差。
字段 含义
si 从磁盘中交换到内存中数据的数量,单位为 KB。
so 从内存中交换到磁盘中数据的数量,单位为 KB。
  • io 磁盘读/写信息字段,这两个数越大(如超出1024k),代表系统的 I/O 越繁忙。
字段 含义
bi 从块设备中读入的数据的总量,单位是块。
bo 写到块设备的数据的总量,单位是块。
  • system 系统信息,这两个数越大,代表系统与接口设备的通信越繁忙。
字段 含义
in 每秒被中断的进程次数。
cs 每秒进行的事件切换次数。
  • CPU信息字段
字段 含义
us 非内核进程消耗 CPU 运算时间的百分比。
sy 内核进程消耗 CPU 运算时间的百分比。
id 空闲 CPU 的百分比。
wa 等待 I/O 所消耗的 CPU 百分比。
st 被虚拟机所盗用的 CPU 百分比。
相关推荐
独行soc5 分钟前
2025年渗透测试面试题总结-某服面试经验分享(附回答)(题目+回答)
linux·运维·服务器·网络安全·面试·职场和发展·渗透测试
sunshineine1 小时前
jupyter notebook运行简单程序
linux·windows·python
月月大王1 小时前
easyexcel导出动态写入标题和数据
java·服务器·前端
O。o.尊都假都1 小时前
UDP协议
linux·服务器·网络·网络协议·udp
天夏已微凉2 小时前
1.3.1 Linux音频框架alsa详细介绍
linux·音视频
惜.己2 小时前
linux中的常用命令(一)
linux·运维·服务器
国际云,接待3 小时前
云计算的基础概论
服务器·人工智能·阿里云·云原生·云计算·腾讯云·aws
搬码临时工3 小时前
如何通过外网访问内网?对比5个简单的局域网让互联网连接方案
服务器·网络·智能路由器·内网穿透·外网访问
m0_593758104 小时前
系统重装之后,通过ssh无法登录
linux·运维·服务器
Micro麦可乐4 小时前
最新Spring Security实战教程(十四)OAuth2.0精讲 - 四种授权模式与资源服务器搭建
java·服务器·spring boot·spring·spring security·oauth2·oauth2授权