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. JavaScript精要

    写在开篇之前 这个系列都文章算是我最近研究了JavaScript(以后简称js)大半个月的一点心得吧.记得以前看过罗小平的一本书叫<Delphi精要>,我也就姑且起名叫<JavaSc ...

  2. 利用uploadify+asp.net 实现大文件批量上传。

    前言 现在网上文件上传组件随便一搜都是一大堆,不过看大家一般都在用uploadify这个来上传文件.由于项目需要,我在来试了一下.因为第一次使用,也遇到了很多问题,特此记录! ------------ ...

  3. BGP路由协议详解(完整篇)

    原文链接:http://xuanbo.blog.51cto.com/499334/465596/ 2010-12-27 12:02:45 上个月我写一篇关于BGP协议的博文,曾许诺过要完善这个文档,但 ...

  4. Spring3+Mybatis3+Mysql+ivy+liquibase

    Spring3+Mybatis3+Mysql+ivy+liquibase 集成 近一周时间所学技术:整合Spring+MyBatis+MySql+ivy+liquibase Mybatis:是一个基于 ...

  5. ERROR: “System.Web.Mvc.Controller.File(string, string, string)”是一个“方法”

    ERROR: “System.Web.Mvc.Controller.File(string, string, string)”是一个“方法”,这在给定的上下文中无效 这是一个与Controller.F ...

  6. android 资讯阅读器(二)

    接着上次的博客,上次移植完了tab以后整个app的框架就算是定下来了. 本次目标: 1.数据的获取与展示(ListView) 2.官方的下拉刷新效果(SwipeRefreshLayout) 3.数据接 ...

  7. PHP 解析 ElasticSearch 的 json 方法,有關遍歷所有 json 元素

    以下是eleasticsearch返回的json資料:{"took" : 12,"timed_out" : false,"_shards" ...

  8. Linux_Shell_输出重定向

      创建两个文件:touch 1  touch2  命令 > 文件  以覆盖的方式输出正确信息到文件或设备ls > 1 命令 >> 文件 以追加的方式输出正确信息到文件或设备l ...

  9. judge remote file exist

    # -*- coding:utf-8 -*- import paramiko,os,sys,time print ''' *****判断远端服务器上的某个文件是否存在***** ''' ip = ra ...

  10. 100735D

    排序+搜索 为什么这是对的呢?其实我不是很清楚 大概是这个样子的:我们希望构成三角形的三个数尽可能集中,因此在搜索中贪心地选取从最小依次往上,选取三条边,但是总感觉有反例,先挖个坑... #inclu ...