方法一:top 命令



1. # top
2. top - 15:12:56 up 64 days, 21:18,  1 user,  load average: 3.88, 7.20, 8.13
3. Tasks: 526 total,   1 running, 525 sleeping,   0 stopped,   0 zombie
4. %Cpu(s): 25.4 us,  0.5 sy,  0.0 ni, 74.1 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

具体的参数解释如下:

  Tasks: 526 total 进程总数

  1 running 正在运行的进程数

  525 sleeping 睡眠的进程数

  0 stopped 停止的进程数

  0 zombie 僵尸进程数

 

  Cpu(s):

  25.4% us 用户空间占用CPU百分比

  0.5% sy 内核空间占用CPU百分比

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

  74.1% id 空闲CPU百分比

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

0.0% wa 的百分比可以大致的体现出当前的磁盘io请求是否频繁。如果 wa的数量比较大,说明等待输入输出的的io比较多。

 

方法二:vmstat 命令


 


    1. # vmstat
    2. procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
    3.  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
    4. 44  0 2637244 1792992      0 22761468    0    0    29    31    0    0  4  1 95  0  0

     

    vmstat参数解释:

      Procs

      r: 等待运行的进程数 b: 处在非中断睡眠状态的进程数 w: 被交换出去的可运行的进程数。此数由 linux 计算得出,但 linux 并不耗尽交换空间

      Memory

      swpd: 虚拟内存使用情况,单位:KB

      free: 空闲的内存,单位KB

      buff: 被用来做为缓存的内存数,单位:KB

      Swap

      si: 从磁盘交换到内存的交换页数量,单位:KB/秒

      so: 从内存交换到磁盘的交换页数量,单位:KB/秒

      IO

      bi: 发送到块设备的块数,单位:块/秒

      bo: 从块设备接收到的块数,单位:块/秒

      System

      in: 每秒的中断数,包括时钟中断

      cs: 每秒的环境(上下文)切换次数

      CPU

      按 CPU 的总使用百分比来显示

      us: CPU 使用时间

      sy: CPU 系统使用时间

      id: 闲置时间

           wa 等待IO时间 Wa过高时,说明io等待比较严重,这可能是由于磁盘大量随机访问造成的,也有可能是磁盘的带宽出现瓶颈。

     

    vmstat -d 可以显示详细磁盘信息


     



    1. # vmstat -d
    2. disk- ------------reads------------ ------------writes----------- -----IO------
    3.        total merged sectors      ms  total merged sectors      ms    cur    sec
    4. sda   51544212 4376046 15326237580 1528893285 77378992 6087788 16849888943 1237001225      0 151573
    5. sr0       18      0    2056      72      0      0       0       0      0      0
    6. dm-0  359607      0 17168007 1936150 10555541      0 195526291 49722767      0  14768
    7. dm-1  1377643      0 11029344 7709149 2299406      0 18395248 25937000      0    904
    8. dm-2  54342484      0 15297982937 2134548820 70611793      0 16635742795 1265693658      0 140203

    total: 总的成功读写次数

    sectors: 成功读写的扇区

    ms: 读写花费的毫秒数

    merged:表示一次来自于合并的写/读请求,一般系统会把多个连接/邻近的读/写请求合并到一起来操作.

    vmstat 当然也可以作为 IO,cpu,内存性能瓶颈的分析

     

    方法三:iostat 命令


     



    1. # iostat
    2. Linux 3.10.0-957.10.1.el7.x86_64 (master) 05/30/2019 _x86_64_(48 CPU)
    3. avg-cpu:  %user   %nice %system %iowait  %steal   %idle
    4.            3.98    0.00    0.63    0.08    0.00   95.31
    5. Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
    6. sda              22.99      1366.56      1502.50 7663119794 8425406616
    7. scd0              0.00         0.00         0.00       1028          0

     

    avg-cpu 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值

    Device 各磁盘设备的IO统计信息

     

    %user CPU在用户态执行进程的时间百分比。

    %nice CPU在用户态模式下,用于nice操作,所占用CPU总时间的百分比

    %system CPU处在内核态执行进程的时间百分比

    %iowait CPU用于等待I/O操作占用CPU总时间的百分比

    %steal 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU的百分比

    %idle CPU空闲时间百分比

     

    tps 每秒向磁盘设备请求数据的次数,包括读、写请求,为rtps与wtps的和。出于效率考虑,每一次IO下发后并不是立即处理请求,而是将请求合并(merge),这里tps指请求合并后的请求计数。

    Blk_read/s 每秒读取的数据块。块相当于内核2.4或更高版本的扇区,因此大小为512字节。对于较老的内核,块的大小是不确定的

    Blk_wrtn/s 每秒写入的数据块.

    Blk_read 取样时间间隔内读扇区总数量

    Blk_wrtn 取样时间间隔内写扇区总数量

     

    1. 若 %iowait 的值过高,表示硬盘存在I/O瓶颈 

    2. 若 %idle 的值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量 

    3. 若 %idle 的值持续低于1,则系统的CPU处理能力相对较低,表明系统中最需要解决的资源是 CPU

     

    可以使用iostat -c选项单独显示avg-cpu部分的结果,使用iostat -d选项单独显示Device部分的信息