Linux vmstat命令实战详细解析

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。

一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数,如:


代码如下:

root@ubuntu:~# vmstat 2 1procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa 1  0      0 3498472 315836 3819540    0    0     0     1    2    0  0  0 100  0

2表示每个两秒采集一次服务器状态,1表示只采集一次。

实际上,在应用过程中,我们会在一段时间内一直监控,不想监控直接结束vmstat就行了,例如:


代码如下:

root@ubuntu:~# vmstat 2 
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0      0 3499840 315836 3819660    0    0     0     1    2    0  0  0 100  0
 0      0 3499584 315836 3819660    0    0     0     0   88  158  0  0 100  0
 0      0 3499708 315836 3819660    0    0     0     2   86  162  0  0 100  0
 0      0 3499708 315836 3819660    0    0     0    10   81  151  0  0 100  0
 0      0 3499732 315836 3819660    0    0     0     2   83  154  0  0 100  0

这表示vmstat每2秒采集数据,一直采集,直到我结束程序,这里采集了5次数据我就结束了程序。

好了,命令介绍完毕,现在开始实战讲解每个参数的意思。

r 表示运行队列(就是说多少个进程真的分配到CPU),我测试的服务器目前CPU比较空闲,没什么程序在跑,当这个值超过了CPU数目,就会出现CPU瓶颈了。这个也和top的负载有关系,一般负载超过了3就比较高,超过了5就高,超过了10就不正常了,服务器的状态很危险。top的负载类似每秒的运行队列。如果运行队列过大,表示你的CPU很繁忙,一般会造成CPU使用率很高。

b 表示阻塞的进程,这个不多说,进程阻塞,大家懂的。

swpd 虚拟内存已使用的大小,如果大于0,表示你的机器物理内存不足了,如果不是程序内存泄露的原因,那么你该升级内存了或者把耗内存的任务迁移到其他机器。

free   空闲的物理内存的大小,我的机器内存总共8G,剩余3415M。

buff   Linux/Unix系统是用来存储,目录里面有什么内容,权限等的缓存,我本机大概占用300多M

cache cache直接用来记忆我们打开的文件,给文件做缓冲,我本机大概占用300多M(这里是Linux/Unix的聪明之处,把空闲的物理内存的一部分拿来做文件和目录的缓存,是为了提高 程序执行的性能,当程序使用内存时,buffer/cached会很快地被使用。)

si  每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露了,要查找耗内存进程解决掉。我的机器内存充裕,一切正常。

so  每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上。

bi  块设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte,我本机上没什么IO操作,所以一直是0,但是我曾在处理拷贝大量数据(2-3T)的机器上看过可以达到140000/s,磁盘写入速度差不多140M每秒

bo 块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整。

in 每秒CPU的中断次数,包括时间中断

cs 每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好,太大了,要考虑调低线程或者进程的数目,例如在apache和nginx这种web服务器中,我们一般做性能测试时会进行几千并发甚至几万并发的测试,选择web服务器的进程可以由进程或者线程的峰值一直下调,压测,直到cs到一个比较小的值,这个进程和线程数就是比较合适的值了。系统调用也是,每次调用系统函数,我们的代码就会进入内核空间,导致上下文切换,这个是很耗资源,也要尽量避免频繁调用系统函数。上下文切换次数过多表示你的CPU大部分浪费在上下文切换,导致CPU干正经事的时间少了,CPU没有充分利用,是不可取的。

us 用户CPU时间,我曾经在一个做加密解密很频繁的服务器上,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能表现不佳)。

sy 系统CPU时间,如果太高,表示系统调用时间长,例如是IO操作频繁。

id  空闲 CPU时间,一般来说,id + us + sy = 100,一般我认为id是空闲CPU使用率,us是用户CPU使用率,sy是系统CPU使用率。

wt 等待IO CPU时间。

(0)

相关推荐

  • VIM中设置php自动缩进为4个空格的方法详解

    代码自然少不了文本编辑利器vim,自动缩进是用制表符的,即便自己删掉制表符改成4个空格,也会在下一层次缩进中继续用制表符,这就造成了空格和制表符混用 可以修改.etc/vimrc的信息: 其中相关变量含义:     变量名     缩写      含义 (no)autoindent  ai   自动缩进,即为新行自动添加与当前行同等的缩进. (no)cindent     ci   类似C语言程序的缩进 (no)smartindent si   基于autoindent的一些改进      变量

  • linux系统获取硬盘使用信息

    1.df命令 Linux下可以用df命令获取硬盘的使用情况,通过man可以获取df命令的详细情况.df命令经常用的参数为: a:显示全部的档案系统和各分割区的磁盘使用情形 i:显示i -nodes的使用量 k:大小用k来表示 (默认值) t:显示某一个档案系统的所有分割区磁盘使用量 x:显示不是某一个档案系统的所有分割区磁盘使用量 T:显示每个分割区所属的档案系统名称 常用命令:df -hi 举例截图如下所示 2.du命令 du命令用来查询档案或目录的磁盘使用空间,通过man获取du命令的详细介

  • 在vim中添加perl注释时无法对齐问题的解决方法

    在.vimrc中加入如下几行,即可解决这个问题. 复制代码 代码如下: "Only do this part when compiled with support for autocommands.if has("autocmd")    filetype plugin indent onelse    set autoindentendif "has("autocmd")

  • Linux shell脚本全面学习入门

    1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编辑好脚本时,如果要执行该脚本,还必须使其可执行. 要使脚本可执行: 编译 chmod +x filename 这样才能用./filename 来运行 1.1.2 注释 在进行shell编程时,以#开头的句子表示注释,直到这一行的结束.我们真诚地建议您

  • linux之sed命令的用法

    sed命令行格式为:sed [-nefri] 'command' 输入文本 常用选项:-n∶使用安静(silent)模式.在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上.但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来.-e∶直接在指令列模式上进行 sed 的动作编辑:-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作:-r∶sed 的动作支援的是延伸型正规表示法的语

  • linux 可执行文件与写操作的同步问题(文件读写操作产生的锁机制)

    当一个可执行文件已经为write而open时,此时的可执行文件是不允许被执行的.反过来,一个文件正在执行时,它也是不允许同时被write模式而open的.这个约束很好理解,因为文件执行和文件被写应该需要同步保护,因此内核会保证这种同步.那么内核是如何实现该机制的呢?Inode结点中包含一个数据项,叫做i_writecount,很明显是用于记录文件被写的个数的,用于同步的,其类型也是atomic_t. 内核中有两个我们需要了解的函数,与write操作有关,分别是: 复制代码 代码如下: int g

  • 11个有用的Linux命令

    Linux命令行吸引了大多数Linux爱好者.一个正常的Linux用户一般掌握大约50-60个命令来处理每日的任务.Linux命令和它们的转换对于Linux用户.Shell脚本程序员和管理员来说是最有价值的宝藏.有些Linux命令很少人知道,但不管你是新手还是高级用户,它们都非常方便有用.1. sudo !!命令没有特定输入sudo命令而运行,将给出没有权限的错误.那么,你不需要重写整个命令,仅仅输入'!!'就可以抓取最后的命令. 复制代码 代码如下: $ apt-get update E: C

  • linux之awk命令的用法

    先来一个例子:文件a,统计文件a的第一列中是浮点数的行的浮点数的平均值.用awk来实现只需要一句话就可以搞定$cat a1.021 331#.ll   442.53 6ss    7 awk 'BEGIN{total = 0;len = 0} {if($1~/^[0-9]+\.[0-9]*/){total += $1; len++}} END{print total/len}' a(分析:$1~/^[0-9]+\.[0-9]*/表示$1与"/ /"里面的正则表达式进行匹配,若匹配,则t

  • linux Vim基本操作方法

    最近在用Ubuntu11.04重新学习以前没怎么学好的Unix,不过在VMware7.1.4下Ubuntu11.04的X Window表现不是很好.这都无所谓,先把命令行的基础打好再说.Ubuntu的Vi也不好用,搞了个Vim用来学习了,简单记录下它的基本操作,备用,给大家提供一本书<UNIX实用教程(第5版)>命令模式切换到文本输入模式: 键 功能 i 在光标左侧输入文本 I 在当前行的行首输入文本 a 在光标右侧输入文本 A 在当前行的行尾输入文本 o 在当前行的下一行添加一个空行,光标放

  • linux下实现web数据同步的四种方式(性能比较)

    实现web数据同步的四种方式 ======================================= 1.nfs实现web数据共享2.rsync +inotify实现web数据同步3.rsync+sersync更快更节约资源实现web数据同步4.unison+inotify实现web数据双向同步 ======================================= 一.nfs实现web数据共享 nfs能实现数据同步是通过NAS(网络附加存储),在服务器上共享一个文件,且服务器需

  • linux之sort命令的用法

    sort命令是帮我们依据不同的数据类型进行排序,其语法及常用参数格式:sort [-bcfMnrtk][源文件][-o 输出文件] 补充说明:sort可针对文本文件的内容,以行为单位来排序. 参 数:  -b   忽略每行前面开始出的空格字符.  -c   检查文件是否已经按照顺序排序.  -f   排序时,忽略大小写字母.  -M   将前面3个字母依照月份的缩写进行排序.  -n   依照数值的大小排序.  -o<输出文件>   将排序后的结果存入指定的文件.  -r   以相反的顺序来排

  • Android中vim编辑器进阶的使用介绍

    1. 移动指令    (1). h j k l, 方向键,记忆技巧:左右方向的是最左边和最右边的,j向下打了个勾,所以是向下键,剩下的k就是向上的键了.    (2). b, before,上一个单词(词首)           w, word,下一个单词(词首)           e,  end,下一个单词(词尾)    注意这些小写的命令由字母,点,数字,下划线划分,还有这三个对应的大写字母的命令,B,W,E,类似的意思,但是是以空格区分移动的.总而言之,大写的移动范围要大.    (3)

  • Windows下利用Gvim写PHP产生中文乱码问题解决方法

    首先:找出乱码产生的原因. 一直以为是浏览器的原因,结果我在chrome,firefox,IE9里面都出现了乱码,所以浏览器的因素可以排除.为了验证我猜测是Gvim的原因, 我用记事本(note)简单写了一个php文件 复制代码 代码如下: <?php echo "你好"; echo "世界"; ?> 结果没有出现乱码,所以问题就出在Gvim上,这个结论水到渠成. 于是,开始研究Gvim的配置文件(_vimrc), 现在给大家看一下我产生乱码之前的配置(

  • linux之cut命令的用法

    (1)其语法格式为:cut  [-bn] [file] 或 cut [-c] [file]  或  cut [-df] [file] 使用说明cut 命令从文件的每一行剪切字节.字符和字段并将这些字节.字符和字段写至标准输出.如果不指定 File 参数,cut 命令将读取标准输入.必须指定 -b.-c 或 -f 标志之一. 主要参数-b :以字节为单位进行分割.这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志.-c :以字符为单位进行分割.-d :自定义分隔符,默认为制表符.-f :与

随机推荐