linux系统性能监视命令

preface

as a linux engineer,you should know how to use these command of monitor system,so let's learn these commands.

vmstat

如有问题,请与我联系,18500777133@sina.cn
vmstat是由procps包安装后命令,它是Virtual Memory Statistics(虚拟内存统计)的缩写。利用vmstat命令,我们可以对linux操作系统的内存,进程状态,CPU活动等进行监视,不足之处就是无法对某个进程进行深入分析。
命令使用如下:

[root@localhost ~]# vmstat -h
usage: vmstat [-V] [-n] [delay [count]]
              -V prints version.       # 打印详情
              -n causes the headers not to be reprinted regularly.   # 在周期内规律循环输出
              -a print inactive/active page stats.  # 打印活动和非活动的页信息
              -d prints disk statistics   # 打印磁盘统计信息
              -D prints disk table     # 打印磁盘表
              -p prints disk partition statistics   # 打印磁盘分区统计信息
              -s prints vm table    # 打印虚拟内存表
              -m prints slabinfo   #打印缓存信息
              -t add timestamp to output   # 添加时间戳在输出结果
              -S unit size      # 单元大小
              delay is the delay between updates in seconds.  #每两次输出的间隔信息
              unit size k:1000 K:1024 m:1000000 M:1048576 (default is K)  
              count is the number of updates.    # 按照delay指定的时间间隔统计的次数,默认为1

下面来看个例子:

[root@localhost ~]# vmstat 2 3
procs -----------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 111688  76144 199116    0    0     3     4   32   55  0  0 100  0  0	
 0  0      0 111656  76144 199116    0    0     0     0   25   33  0  0 100  0  0	
 0  0      0 111656  76144 199116    0    0     0    16   24   32  0  0 100  0  0
  • procs
  1. r表示运行和等待CPU时间片的进程数,这个值如果长期大于系统CPU的个数,说明CPU不足,需要增加CPU
  2. b表示在等待资源的进程数,比如正在等待I/O或者内存交换等。
  • memory
  1. swpd列表示切换到内存交换分区的内存大小(以KB作为单位)。如果swpd的值不为0,或者 比较大,只要si、so的值长期为0,这种情况一般不用担心了,不会影响系统性能。
  2. free列表示当前空闲的物理内存数量(以KB为单位)
  3. buff列表示buffers cache的内存数量,一般为块设备的读写才需要缓冲。
  4. cache列表示page cached的内存数量,一般为文件系统进行缓存,频繁访问的文件都会被缓存。如果cache值比较大,说明缓存的文件数比较多,如果此时的IO中的bi比较小,说明文件系统效率比较好。
  • swap
  1. si 表示由磁盘写入内存,也就是内存进入内存交换分区的内存大小。
  2. so表示内存调入磁盘,也就是内存交换分区进入RAM的内存大小。

一般情况下,si so的值都为0,如果si so长期不为0,说明系统RAM不足了,需要增加物理内存。

  • io
    表示磁盘读写情况
  1. bi表示从块设备读入数据的总量(即读磁盘),单位是kb/s。
  2. bo表示写入数据到磁盘,单位同上。
    这里设置的bi+bo参考值为1000,如果超过1000,而且CPU列的wa(wait)值比较大,则表示系统磁盘I/O有问题,应该考虑提高磁盘的读写性能。
  • system
    显示采集间隔发生的中断数
  1. in表示在某一时间间隔内观测到的每秒设备中断数。
  2. cs(content switch)表示每秒产生的上下文切换次数。
    上面两个值越大,由内核消耗的CPU时间越多。
  • cpu
  1. us表示用户进程消耗CPU的时间百分比,us的值比较高的时候,说明用户进程消耗的CPU时间多,但是如果长期大于50%,就需要考虑优化程序和算法了。
  2. sy列显示了内核进程消耗的CPU时间百分比,sy值比较高时,说明内核消耗的CPU资源很多。
    根据经验,us+uy的参考值为80%,如果us+sy大于80%,说明可能存在CPU资源不足。
  3. id表示CPU空闲状态的百分比
  4. wa列显示了IO等待所占用的CPU时间百分比。wa值越高,说明I/O等待越严重。根据经验,wa的参考值为20%,如果wa超过20%,说明IO等待严重,引起IO等待的原因可能是磁盘大量随机读写造成的。也可能是磁盘或者磁盘控制器的带宽瓶颈(主要是块操作)造成的。

综上所说的,在对CPU评估中,需要重点注意procs像中的r列的值和CPU项中us、sy和id列的值。

sar

sar是由sysstat包安装而成的,也是分析系统性能的重要工具,可以全面获取系统CPU,运行队列,磁盘I/O,分页(交换分区),内存,CPU中断,网络等性能数据。
命令如下:

[root@localhost ~]# sar --help
Usage: sar [ options ] [ <interval> [ <count> ] ]
Options are:
[ -A ] [ -b ] [ -B ] [ -C ] [ -d ] [ -h ] [ -m ] [ -p ] [ -q ] [ -r ] [ -R ]
[ -S ] [ -t ] [ -u [ ALL ] ] [ -v ] [ -V ] [ -w ] [ -W ] [ -y ]
[ -I { <int> [,...] | SUM | ALL | XALL } ] [ -P { <cpu> [,...] | ALL } ]
[ -j { ID | LABEL | PATH | UUID | ... } ] [ -n { <keyword> [,...] | ALL } ]
[ -o [ <filename> ] | -f [ <filename> ] ] [ --legacy ]
[ -i <interval> ] [ -s [ <hh:mm:ss> ] ] [ -e [ <hh:mm:ss> ] ]

参数解释:

  • -A显示系统所有的资源设备(cpu,内存,磁盘)等运行状况。
  • -u显示系统所有CPU在采样时间内的负载状态。
  • -P显示当前系统中指定CPU的使用情况。
  • -d显示系统所有硬盘设备在采样时间内的使用情况。
  • -r显示内存在采用时间的使用情况
  • -b显示缓冲区在采用时间的使用情况
  • -v显示进程,文件,节点和锁表状态
  • -n 显示网络运行状态。参数后面可以跟DEV,EDEV,sock和full。dev显示网络接口信息,Edev显示网络错误的统计数据,sock显示套接字信息,full显示前三参数的所有信息。他们可以单独使用或者一起使用。
  • q显示运行队列的大小,它与系统当时的平均负载相同。
  • -R显示进程在采用时间内的活动情况
  • -y显示终端设备在采用时间的使用情况
  • -w显示系统交换活动在采用时间的使用情况
  • -o filename 表示将命令结果以二进制格式存放在文件中,filename是文件名
  • interval表示采样间隔,是必须有的参数。
  • count表示采用次数,可选参数,默认值为1

命令使用:

每一列的参数输出都写的很详细了,所以不做赘述。
[root@localhost ~]# sar -p 2 3    # 采集CPU信息,2秒采集一次,共三次
[root@localhost ~]# sar -w 1 3  #采集系统交换活动在采用时间的使用情况 ,1秒采集一次,共三次
[root@localhost ~]# sar -d 1 3    # 采集系统所有硬盘设备在采样时间内的使用情况。
[root@localhost ~]# sar -r 1 3    #显示内存在采用时间的使用情况,1秒采集一次,共三次
[root@localhost ~]# sar -n DEV 1 3    # 显示网络接口信息,每1秒采集一次,共采集3次

以前在蓝厂上班的时候遇到过这样的情况,系统负载不高,但是squid响应非常慢,找了一会儿发现squid只跑在了一个CPU核心上,这个核心使用率已经100%了,但是因为一个CPU核心使用率高,其他的核心低,所以导致sys load不高,这个时候,我们就要单独查看一个核心的使用率了,可以用到下面的命令:

我的是虚拟机,只分配了有一个1个CPU
[root@localhost ~]# sar -P 1 1 3   # 只有一个cpu,显示不了
Linux 2.6.32-504.el6.x86_64 (localhost.localdomain) 	11/17/2016 	_x86_64_	(1 CPU)

03:57:55 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
[root@localhost ~]# sar -P 0 1 3    # 监视cpu 第0个核心的使用率。
Linux 2.6.32-504.el6.x86_64 (localhost.localdomain) 	11/17/2016 	_x86_64_	(1 CPU)

03:58:00 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
03:58:01 PM       0      0.00      0.00      4.04      0.00      0.00     95.96
03:58:02 PM       0      0.00      0.00      3.03      0.00      0.00     96.97
03:58:03 PM       0      0.00      0.00      5.00      0.00      0.00     95.00
Average:          0      0.00      0.00      4.03      0.00      0.00     95.97

iostat

iostat 是安装sysstat后才有的命令,它是对系统磁盘IO操作进行监视的。它的输出主要是磁盘读写操作的统计信息,同事给出CPU的情况。和vmstat一样,只能监视系统整体情况,不能够对单个进程做分析。

[root@localhost ~]# iostat -help
Usage: iostat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -c ] [ -d ] [ -N ] [ -n ] [ -h ] [ -k | -m ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j { ID | LABEL | PATH | UUID | ... } [ <device> [...] | ALL ] ]
[ <device> [...] | ALL ] [ -p [ <device> [,...] | ALL ] ]
  • -c 显示CPU情况
  • -d 显示磁盘的使用情况
  • -k 显示每秒以KB为单位显示数据
  • -t 打印出统计信息开始执行的时间
  • -x device指定要统计时间的磁盘设备名称,默认为所有的磁盘设备。
  • interval 采集时间间隔
  • count 次数

常用的命令组合如下:

[root@localhost ~]# iostat -d 1 3
Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               0.49         6.12         8.84     392498     566882
Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               0.00         0.00         0.00          0          0
Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               0.00         0.00         0.00          0          0

上面每项输出的解释:

  • Blk_read/s 表示每秒读取的数据块数
  • Blk_write/s 表示每秒吸入的数据块数
  • Blk_read 表示读取的所有块数
  • Blk_wrtn表示写入的所有块数。

要注意的是,上面输出的第一项是从系统启动到统计时的所有传输信息,这个第二次输出的数据才代表在检测的时间段内系统的传输值。

[root@localhost ~]# iostat -x /dev/sda  1 2
Linux 2.6.32-504.el6.x86_64 (localhost.localdomain) 	11/17/2016 	_x86_64_	(1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.03    0.00    0.15    0.12    0.00   99.70

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.09     0.76    0.14    0.35     6.08     8.82    30.70     0.00    8.01   3.65   0.18

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.99    0.00    0.00   99.01

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

参数解释

  • rrqm/s 表示每秒进行合并的读操作数目
  • wrqm/s 表示每秒进行合并的写操作数目
  • r/s 表示每秒完成读I/O的设备次数
  • w/s 表示每秒完成写I/O的设备次数
  • rsec/s 表示每秒读取的扇区数
  • wsec/s 表示每秒写入的扇区数。

uptime

着重点说说sys load,

[root@localhost ~]# uptime
 17:08:49 up 18:45,  1 user,  load average: 0.00, 0.00, 0.00

这个load average有3个值输出,这个的负载不超过你当前CPU核心数即可,,像我这里的虚拟机有1个CPU,1核心,所以不超过1就行了。偶尔超过下不影响性能。

top

top命令不做赘述了,输出的结果非常详细,每一列也做了说明在输出结果的列表里面。

posted @ 2016-11-17 16:28  温柔易淡  阅读(547)  评论(0编辑  收藏  举报