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命令不做赘述了,输出的结果非常详细,每一列也做了说明在输出结果的列表里面。

linux系统性能监视命令的更多相关文章

  1. 查看linux系统版本命令 (转)

    查看linux系统版本命令 分类: Linux 知识小结2011-10-10 15:26 240162人阅读 评论(9) 收藏 举报 linuxredhatdebianx86susesun 一.查看内 ...

  2. Linux系统ifconfig命令找不到,centos ifconfig Command not found

    centos ifconfig Command not found,Linux系统ifconfig命令找不到 >>>>>>>>>>>& ...

  3. Linux系统基础命令

    这是看itercast的学习笔记 Linux系统基础命令 日期时间 命令date用以查看.设置当前系统时间:格式化显示时间: +%Y--%m--%d 命令hwclock(clock)用以显示硬件时钟时 ...

  4. Linux系统-解压缩命令集合

    Linux系统-解压缩命令集合 linux zip命令 zip -r myfile.zip ./* 将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件. ...

  5. LINUX系统VMSTAT命令详解

    linux系统vmstat命令详解 [转自 https://www.cnblogs.com/wensiyang0916/p/6514820.html] vmstat 1    1表示每秒采集一次vms ...

  6. 【转载】Linux系统下命令行连接蓝牙设备 查看查找 蓝牙

    Linux系统下命令行连接蓝牙设备 2018年11月26日 10:47:27 Zz笑对一切 阅读数:741   1.打开系统蓝牙 sudo service bluetooth start 1 进入bl ...

  7. Linux系统——awk命令

    awk命令不仅仅是Linux系统的命令,也是一种编程语言,用来处理数据和生成报告(Exel),处理的数据可以是一个或多个文件(标准输入和管道获取标准输入).可在命令行上编辑操作,也可以写成awk程序运 ...

  8. 给大家介绍一下linux系统高级命令

    输出重定向(mip.0834jl.com) ;覆盖文件内容 回声' 123 ' 测试;覆盖原始内容 回声' 123 ' 测试;原始存在(共存) echo 'ken2 '(www.jl0834.com) ...

  9. spark实验(一)--linux系统常见命令及其文件互传(2)

    2.使用 Linux 系统的常用命令 启动 Linux 虚拟机,进入 Linux 系统,通过查阅相关 Linux 书籍和网络资料,或者参考 本教程官网的“实验指南”的“Linux 系统常用命令”,完成 ...

随机推荐

  1. 转载:ZooKeeper Programmer's Guide(中文翻译)

    本文是为想要创建使用ZooKeeper协调服务优势的分布式应用的开发者准备的.本文包含理论信息和实践信息. 本指南的前四节对各种ZooKeeper概念进行较高层次的讨论.这些概念对于理解ZooKeep ...

  2. latex中页面距离的设置

    1.页面设置 a4 会给你一个较小的页面,为了使用更多的控制,可用 geometry宏包和命令 \layout . 2.改变长度 在latex里改变长度的命令是 \addtolength 和 \set ...

  3. html 文本超过显示省略号

    display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2;//显示行数 word-break: break-a ...

  4. IOS_SearchBar搜索栏及关键字高亮

    搜索框的效果演示: 这个就是所谓的搜索框了,那么接下来我们看看如何使用代码来实现这个功能. 我所使用的数据是英雄联盟的英雄名单,是一个JSON数据的txt文件, JSON数据的处理代码如下所示: ? ...

  5. Volley用法

    RequestQueue requestQueue = Volley.newRequestQueue(this); JsonObjectRequest jsonObjectRequest = new ...

  6. 总有一天会NB的! SB一样的坚持会有NB一样的结果的!

    第一天: 1.背景图不显示,因为背景图片无法撑开div,所以必须自己设置div的高度哦! 2.div水平居中! A:margin-left:auto;margin-right:auto;  B: 父元 ...

  7. jquery 获取Select option 选择的Text和Value

    jquery radio取值,checkbox取值,select取值,radio选中,checkbox选中,select选中,及其相关设置 获取一组radio被选中项的值:var item = $(' ...

  8. mysql数据库行级锁的使用(二)

    项目上的另外一个需求是: 在做统计的时候需要将当前表锁定不能更新当前表记录 直接上代码 package com.robert.RedisTest; import java.sql.Connection ...

  9. [Linux.NET] CentOS 开启/关闭端口

    最近一直在学习研究mvc网站部署到Linux上,Web服务器用的Jexus,linux版本是阿里云提供的centos.一个服务器又要放多个独立网站,对于学习阶段使用多个端口标识还是挺方便的,本文记录下 ...

  10. python模块介绍二。

    全局变量 全局变量 python在一个.py文件内部自动添加了一些全局变量 print(vars()) #查看当前的全局变量 执行结果: {'__package__': None, '__loader ...