linux CPU性能及工作状态查看指令

本博客主要讲解了日常运维过程中,查看系统状态的一些指令mpstat,vmstat,iostat,sar,top

0、准备知识

1> 衡量CPU性能的指标:

<1> 用户使用CPU

  • CPU运行实时进程
  • CPU运行niced process
  • CPU运行常规用户进程

<2> 系统使用CPU

  • 用于I/O管理:中断和驱动
  • 用于内存管理:页面交换
  • 用于进程管理:进程开始和上下文切换

<3> WIO:用于进程等待磁盘I/O而使CPU处于空闲状态的比率。
<4> CPU的空闲率,除了上面的WIO以外的空闲时间
<5> CPU用于上下文交换的比率
<6> nice
<7> real-time
<8> 运行进程队列的长度
<9> 平均负载

2> Linux常用监控CPU整体性能的工具

<1> mpstat: mpstat 不但能查看所有CPU的平均信息,还能查看指定CPU的信息。
<2> vmstat:只能查看所有CPU的平均信息;查看cpu队列信息;
<3> iostat: 只能查看所有CPU的平均信息。
<4> sar: 与mpstat 一样,不但能查看CPU的平均信息,还能查看指定CPU的信息。
<5> top:显示的信息同ps接近,但是top可以了解到CPU消耗,可以根据用户指定的时间来更新显示。

1、mpstat指令

mpstat命令:主要用于多CPU 环境下,它显示各个可用CPU的状态。这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。

  • 命令格式:
    mpstat [ 选项 ] [ <时间间隔> [ <次数> ] ]
  • 选项说明
    [ -A ] 展示所有cpu的状态
    [ -I { SUM | CPU | ALL } ] 分三种情况展示 cpu的状态
    [ -u ]
    [ -P { [,…] | ON | ALL } ] 指定某个cpu,进行展示
    [ -V ] 版本信息
  • 参数说明

  • 实例分析
    [root@kvm ~]# mpstat -u
    Linux 2.6.32-431.el6.x86_64 (kvm) 2016年08月02日 x86_64 (2 CPU)

    13时28分09秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
    13时28分09秒 all 0.03 0.00 0.02 0.03 0.00 0.00 0.00 0.00 99.92
    [root@kvm ~]# mpstat -P 0
    Linux 2.6.32-431.el6.x86_64 (kvm) 2016年08月02日 x86_64 (2 CPU)

    13时28分47秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
    13时28分47秒 0 0.03 0.00 0.02 0.00 0.00 0.00 0.00 0.00 99.95
    [root@kvm ~]#
    [root@kvm ~]# mpstat -P 1
    Linux 2.6.32-431.el6.x86_64 (kvm) 2016年08月02日 x86_64 (2 CPU)

    13时28分50秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
    13时28分50秒 1 0.03 0.00 0.02 0.05 0.00 0.00 0.00 0.00 99.90

    [root@kvm ~]# mpstat -A
    Linux 2.6.32-431.el6.x86_64 (kvm) 2016年08月02日 x86_64 (2 CPU)

    13时29分11秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
    13时29分11秒 all 0.03 0.00 0.02 0.03 0.00 0.00 0.00 0.00 99.92
    13时29分11秒 0 0.03 0.00 0.02 0.00 0.00 0.00 0.00 0.00 99.95
    13时29分11秒 1 0.03 0.00 0.02 0.05 0.00 0.00 0.00 0.00 99.90

    13时29分11秒 CPU intr/s
    13时29分11秒 all 15.60
    13时29分11秒 0 1.06
    13时29分11秒 1 0.18

  • 字段说明

2、vmstat指令

  • 命令格式:
    vmstat [-V] [-n] (选项) [delay [count]](参数)

  • 选项说明

-a:显示活动内页; 
-f:显示启动后创建的进程总数; 
-m:显示slab信息; 
-n:头信息仅显示一次; 
-s:以表格方式显示事件计数器和内存状态; 
-d:报告磁盘状态; 
-p:显示指定的硬盘分区状态; 
-S:输出信息的单位。
  • 参数说明

    **事件间隔delay**:状态信息刷新的时间间隔;
    **次数count**:显示报告的次数。
    
  • 实例分析
    [root@kvm ~]# vmstat -n 3 3 (三秒一次,共三次)
    props ———–memory———- —swap– —–io—- –system– —–cpu—-
    r b swpd free buff cache si so bi bo in cs us sy id wa st
    0 0 0 1100728 188996 495396 0 0 0 1 8 7 0 0 100 0 0
    0 0 0 1100720 188996 495396 0 0 0 0 16 14 0 0 100 0 0
    0 0 0 1100720 188996 495396 0 0 0 0 12 11 0 0 100 0 0

    [root@kvm ~]# vmstat -S M 3 2 (以M为单位显示,默认为k)
    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 1074 184 483 0 0 0 1 8 7 0 0 100 0 0
    0 0 0 1074 184 483 0 0 0 0 17 13 0 0 100 0 0

    [root@kvm ~]# vmstat -f
    94103 forks

  • 字段说明

    Procs(进程)
    r: 运行队列中进程数量,这个值也可以判断是否需要增加CPU。(长期大于1)
    b: 等待IO的进程数量。

    Memory(内存)
    swpd: 使用虚拟内存大小,如果swpd的值不为0,但是SI,SO的值长期为0,这种情况不会影响系统性能。
    free: 空闲物理内存大小。
    buff: 用作缓冲的内存大小。
    cache: 用作缓存的内存大小,如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小。

    Swap
    si: 每秒从交换区写到内存的大小,由磁盘调入内存。
    so: 每秒写入交换区的内存大小,由内存调入磁盘。

    注意:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有些朋友看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。

    IO(现在的Linux版本块的大小为1kb)
    bi: 每秒读取的块数
    bo: 每秒写入的块数
    注意:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。

    system(系统)
    in: 每秒中断数,包括时钟中断。
    cs: 每秒上下文切换数。

    注意:上面2个值越大,会看到由内核消耗的CPU时间会越大。

    CPU(以百分比表示)
    us: 用户进程执行时间百分比(user time) us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。
    sy: 内核系统进程执行时间百分比(system time) sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。
    wa: IO等待时间百分比 wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。
    id: 空闲时间百分比

3、iostat指令

iostat命令被用于监视系统输入输出设备和CPU的使用情况。它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。同vmstat一样,iostat也有一个弱点,就是它不能对某个进程进行深入分析,仅对系统的整体情况进行分析

  • 命令格式:
    iostat [ 选项 ] [ <时间间隔> [ <次数> ] ]

  • 选项说明
    -c:仅显示CPU使用情况;
    -d:仅显示设备利用率;
    -k:显示状态以千字节每秒为单位,而不使用块每秒;
    -m:显示状态以兆字节每秒为单位;
    -p:仅显示块设备和所有被使用的其他分区的状态;
    -t:显示每个报告产生时的时间;
    -x:显示扩展状态。

  • 参数说明
    间隔时间:每次报告的间隔时间(秒);
    次数:显示报告的次数。

  • 实例分析
    命令:iostat -c 1 1
    Linux 2.6.32-431.el6.x86_64 (kvm) 2016/08/02 x86_64 (2 CPU)
    avg-cpu: %user %nice %system %iowait %steal %idle
    0.03 0.00 0.02 0.03 0.00 99.92

命令:iostat -x /dev/sda1
Linux 2.6.32-431.el6.x86_64 (kvm) 08/02/2016 x86_64 (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.90 0.00 0.87 0.02 0.00 98.21

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util
sda10.33 4.67 0.15 1.39 5.65 48.44 35.23 0.00 1.70 0.38 0.06

命令:iostat -d -m 2 2
Linux 2.6.32-431.el6.x86_64 (kvm) 08/02/2016 x86_64 (4 CPU)
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda 28.75 0.04 2.17 1738866 96878990

Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda 3.00 0.00 0.03 0 0
- 字段说明
linux CPU性能及工作状态查看指令_第1张图片

4、sar指令

sar命令是Linux下系统运行状态统计工具,它将指定的操作系统状态计数器显示到标准输出设备。sar工具将对系统当前的状态进行取样,然后通过计算数据和比例来表达系统的当前运行状态。它的特点是可以连续对系统取样,获得大量的取样数据。取样数据和分析的结果都可以存入文件,使用它时消耗的系统资源很小。

  • 命令格式:
    sar [ 选项 ] [ <时间间隔> [ <次数> ] ]
  • 选项说明
    [ -A ] [ -b ] [ -B ] [ -C ] [ -d ] [ -h ] [ -m ] [ -p ] [ -q ] [ -r ] [ -R ]
    [ -S ] [ -t ] [ -u [ ALL ] ] [ -v ] [ -V ] [ -w ] [ -W ] [ -y ]
    [ -I { [,…] | SUM | ALL | XALL } ] [ -P { [,…] | ALL } ]
    [ -j { ID | LABEL | PATH | UUID | … } ] [ -n { [,…] | ALL } ]
    [ -o [ ] | -f [ ] ] [ –legacy ]
    [ -i ] [ -s [ ] ] [ -e [ ] ]

    -A:显示所有的报告信息;
    -b:显示I/O速率;
    -B:显示换页状态;
    -c:显示进程创建活动;
    -d:显示每个块设备的状态;
    -e:设置显示报告的结束时间;
    -f:从指定文件提取报告;
    -i:设状态信息刷新的间隔时间;
    -P:报告每个CPU的状态;
    -R:显示内存状态;
    -u:显示CPU利用率;
    -v:显示索引节点,文件和其他内核表的状态;
    -w:显示交换分区状态;
    -x:显示给定进程的状态。

主选项和报告:
-b I/O 和传输速率信息状况
-B 分页状况
-d 块设备状况
-I { <中断> | SUM | ALL | XALL }
中断信息状况
-m 电源管理信息状况
-n { <关键词> [,…] | ALL }
网络统计信息
关键词可以是:
DEV 网卡
EDEV 网卡 (错误)
NFS NFS 客户端
NFSD NFS 服务器
SOCK Sockets (套接字) (v4)
IP IP 流 (v4)
EIP IP 流 (v4) (错误)
ICMP ICMP 流 (v4)
EICMP ICMP 流 (v4) (错误)
TCP TCP 流 (v4)
ETCP TCP 流 (v4) (错误)
UDP UDP 流 (v4)
SOCK6 Sockets (套接字) (v6)
IP6 IP 流 (v6)
EIP6 IP 流 (v6) (错误)
ICMP6 ICMP 流 (v6)
EICMP6 ICMP 流 (v6) (错误)
UDP6 UDP 流 (v6)
-q 队列长度和平均负载
-r 内存利用率
-R 内存状况
-S 交换空间利用率
-u [ ALL ]
CPU 利用率
-v Kernel table 状况
-w 任务创建与系统转换统计信息
-W 交换信息
-y TTY 设备状况

  • 参数说明
    间隔时间:每次报告的间隔时间(秒);
    次数:显示报告的次数。

  • 实例分析

    命令:sar -o temp 60 10 //观察系统部件10分钟,并对数据进行排序:

    察看内存和交换空间的使用率:

    命令:sar -r
    09时20分01秒 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit
    09时30分01秒 1098232 919236 45.56 191632 495492 356908 17.69
    09时40分01秒 1097992 919476 45.58 191744 495484 356908 17.69

    命令:sar -u
    Linux 2.6.32-431.el6.x86_64 (kvm) 2016/08/02日 x86_64 (2 CPU)
    00时00分01秒 CPU %user %nice %system %iowait %steal %idle
    00时10分01秒 all 0.03 0.00 0.02 0.04 0.00 99.91
    00时20分01秒 all 0.03 0.00 0.02 0.03 0.00 99.92

  • 字段说明
    kbmemfree与kbmemused字段分别显示内存的未使用与已使用空间,后面跟着的是已使用空间的百分比(%memused字段)。kbbuffers与kbcached字段分别显示缓冲区与系统全域的数据存取量,单位为KB。

5、top指令

top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。

  • 命令格式:
    top (选项)

  • 选项说明
    -b:以批处理模式操作;
    -c:显示完整的治命令;
    -d:屏幕刷新间隔时间;
    -I:忽略失效过程;
    -s:保密模式;
    -S:累积模式;
    -i<时间>:设置间隔时间;
    -u<用户名>:指定用户名;
    -p<进程号>:指定进程;
    -n<次数>:循环显示的次数。

  • 参数说明

  • 实例分析

    top - 09:44:56 up 16 days, 21:23, 1 user, load average: 9.59, 4.75, 1.92 Tasks: 145 total, 2 running, 143 sleeping, 0 stopped, 0 zombie Cpu(s): 99.8%us, 0.1%sy, 0.0%ni, 0.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 4147888k total, 2493092k used, 1654796k free, 158188k buffers Swap: 5144568k total, 56k used, 5144512k free, 2013180k cached

  • 字段说明
    top - 09:44:56 [当前系统时间],
    16 days [系统已经运行了16天],
    1 user [个用户当前登录],
    load average: 9.59, 4.75, 1.92 [系统负载,即任务队列的平均长度]
    Tasks: 145 total[总进程数],
    2 running[正在运行的进程数],
    143 sleeping[睡眠的进程数],
    0 stopped[停止的进程数],
    0 zombie[冻结进程数],
    Cpu(s): 99.8%us[用户空间占用CPU百分比],
    0.0%ni[用户进程空间内改变过优先级的进程占用CPU百分比], 0.2%id[空闲CPU百分比],
    0.0%wa[等待输入输出的CPU时间百分比],
    0.0%hi[],
    Mem: 4147888k total[物理内存总量],
    2493092k used[使用的物理内存总量],
    1654796k free[空闲内存总量],
    158188k buffers[用作内核缓存的内存量]
    Swap: 5144568k total[交换区总量],
    56k used[使用的交换区总量],
    5144512k free[空闲交换区总量],
    2013180k cached[缓冲的交换区总量],

6、uptime指令

命令:uptime
  20:55:40 up 24 days, 3:06, 1 user, load average: 8.13, 5.90, 4.94
  命令输出的最后内容表示在过去的1、5、15分钟内运行队列中的平均进程数量
  一般来说只要每个CPU的当前活动进程数不大于3那么系统的性能就是良好的,如果每个CPU的任务数大于5,那么就表示这台机器的性能有严重问题。对 于上面的例子来说,假设系统有两个CPU,那么其每个CPU的当前任务数为:8.13/2=4.065。这表示该系统的性能是可以接受的。
  

参考文献

[1]http://www.cnblogs.com/xianghang123/archive/2011/08/25/2153591.html
[2]http://man.linuxde.net/vmstat
[3] http://man.linuxde.net/iostat
[4] http://man.linuxde.net/mpstat
[5]http://man.linuxde.net/sar
[6]http://man.linuxde.net/top
[7]http://blog.csdn.net/szchtx/article/details/38455385

你可能感兴趣的:(Linux)