linux运维工具vmstat、以及虚拟内存使用和swap略谈

  • 内容
  • 评论
  • 相关

在linux的运维中,我们经常会查看内存以及虚拟内存等,我们会经常用到top命令,在top命令中,我们可以开启一个swap的查看,首先开启top,然后按f进入菜单选项,然后按p选在显示swap,这时候top中的显示选项中机会显示swap的使用情况。
当然我们查看swap的使用情况还可以使用sar命令

sar -r

这会显示各个时段对swap的使用情况

02:40:01 PM kbmemfree kbmemused  %memused kbbuffers  kbcached kbswpfree kbswpused  %swpused  kbswpcad
02:50:01 PM   5678524   2486552     30.45    531484    586000   4184924         0      0.00         0
03:00:02 PM   5803848   2361228     28.92    534916    618184   4184924         0      0.00         0
03:10:02 PM   5390564   2774512     33.98    535492    583324   4184924         0      0.00         0
03:20:01 PM   5714564   2450512     30.01    536756    595220   4184924         0      0.00         0
03:30:01 PM   5816712   2348364     28.76    538768    592268   4184924         0      0.00         0
Average:      5949469   2215607     27.14    461365    557531   4184924         0      0.00         0

很多时候,我们使用sar分析CPU的使用状况,例如我在某一天服务器报出了503错误,那么这时候在排除掉是程序问题之后,我就要着手查看服务器的问题了,首先查看CPU,那么我可以通过sar来查看过去的时间里我们的CPU等使用的情况,当然我们是通过分析sar的日志文件:

sar -f /var/log/sa/sa13

这个是分析13号的日志,我们从中便可以结合当前或者其余时间的CPU等资源的使用情况进行对比。如果你的CPU LOAD过高,在500错误的引导下,就要看一下apache,tomcat等web服务器的问题了,尤其是tomcat这个家伙,他对于处理静态HTML很不擅长,经常出现占用CPU过高的情况,因此多加注意。对于sar的具体使用可以参考一篇文章:

http://www.linuxmanpages.com/man1/sar.1.php

当然我们最熟悉的free命令也可以结合使用:

free -m

okay,下面我们来说说vmstat这个小工具的使用,这个从名字上你也许可以看得出有点端倪来了,这是个查看虚拟内存的一个小家伙。我么使用这个小东西可以查看虚拟内存的使用情况,进而分析系统的健康状况。
在系统程式中,我们的每一个进程,包括系统自身的进程,来自外部的网路进程等,都会使用到内存,但是从极限角度来考虑,如果有很多进程在运行,导致整个系统运行所需要的内存超过了实际的物理内存,那这个时候该怎么办呢?这个时侯系统的内核还是很聪明的,他们会主动地释放掉某些进程占用但是没有使用的物理内存,并且将这些进程的资料存放在磁盘上。那么释放出来的内存便可以被另外需要运行的进程使用了。
那么在linux的程式中,是如何调度内存的呢。linux是通过paging和swap来调度,当然很多熟悉windows的人也知道在windows下面也有paging。其中paging的原理是将最近不常用或者没有活动的页面从内存放到磁盘上,这些活动中的也难则会占据着内存。那么swap的原理也是大同小异,但是它是将处于空闲或者不活动的整个进程而不是部分页面全部从内存转移到磁盘上。这两种技术其实道理很简单,常用的活动进程放在内存中,等待调用。不常用的放在磁盘,等待下次调用。显而易见,从内存调用比从磁盘调用快得多啦。
page将页面写入磁盘的过程称为page-out,这些分页从内存交换到磁盘称为page-in。当然这个过程不是百分百准确的,例如,我的内内核需要调用一个分页的时候,可是这个分页已经不在我的物理内存中了,那么这个时侯就会出错,也就是我们常说的page fault。
我们的linux系统是个很聪明的程式系统,他会不断的巡逻,当它发现运行内存变少时,就会使用page-out释放一些内存。page-out并不是发生的越频繁越好,当这个进程频繁执行的时候,使得系统内核管理分页分时间超过运行程式的世家,那么久会使系统性能急剧下降。这时候系统进入满运行或者挂起暂停状态,我们称之为thrashing。
swap也同样的道理,当你追踪swap使用很频繁的时候,okay,你的系统也许开始生病啦。
我们使用以下vmstat来查看一下
#5秒时间采样5次

vmstat 5 5

显示结果如下:

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 5339384 544044 623148    0    0     2    10    0    1  0  0 100  0  0
 1  0      0 5360684 544136 623884    0    0   124  1868 1667 12071  2  0 94  3  0
 2  0      0 5383224 544144 623720    0    0    92   714 1481 11661  2  1 97  0  0
 4  0      0 5319960 544172 623580    0    0   193   996 1450 36657  7  2 90  2  0
 1  2      0 5346520 544160 624252    0    0   561   699 1353 61130 10  2 83  4  0

首先我们要说一下si和so,

si:表示每秒钟从交换区写到内存的大小
so:表示每秒钟写入到交换区的内存大小

那么这两个值显然是越小越好,都是0最好啦。偶尔不是零也没关系,但是最好不要一直不为零。因为如果这两个值如果一直不为零,那么你的内存可能不够用了。

vmstat的几个参数我们见到的介绍一下:
Procs    进程
r        运行中的队列
b        等待I/O的队列
Memory   内存
swpd     使用虚拟内存大小
free     可用内存大小
buff     可用缓冲区大小
cache    用做缓存的内存大小
Swap     交换区使用情况
si:      表示每秒钟从交换区写到内存的大小
so:      表示每秒钟写入到交换区的内存大小   
bi       每秒读取的块数
bo       每秒写入的块数
System   系统情况
in       每秒的中断数 包括时钟中中断
cs       每秒上下文切换数
Cpu      cpu使用情况
us       用户进程执行时间
sy       系统进程执行时间
id       空闲时间
wa       等待IO时间

在使用一个小例子,显示活跃和非活跃内存

vmstat -a 2

显示结果:

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st
 2  3      0 5736420 156900 2029572    0    0     2    10    0    1  0  0 100  0  0
 5  0      0 5735048 157872 2030080    0    0   598   910 1535 30675 10  1 84  4  0
 3  4      0 5710844 158492 2051972    0    0   352  2720 1874 152801 15  3 77  4  0
 1  5      0 5705312 158916 2052424    0    0   344  2184 1850 17698  4  1 85  9  0
 3  5      0 5702396 160072 2052916    0    0   696   732 1519 26225  6  1 85  7  0
 1  6      0 5698728 161780 2054020    0    0  1156  1810 1772 32127  9  1 82  8  0
 3  3      0 5718332 145852 2066360    0    0   992  1386 1768 68865 14  3 77  6  0
 0  7      0 5697268 144612 2087656    0    0   882  1130 1629 31256  8  2 81  9  0
 2  8      0 5693560 146580 2088276    0    0  1040  1078 1560 24447  9  1 80 10  0

这个会实时刷新

vmstat的使用参数简单介绍如下
-a:显示活跃和非活跃内存
-f:显示从系统启动至今的fork数量 。引申閱讀: http://www.cnblogs.com/leoo2sk/archive/2009/12/11/talk-about-fork-in-linux.html
-m:显示slabinfo
-n:只在开始时显示一次各字段名称。
-s:显示内存相关统计信息及多种系统活动数量。
delay:刷新时间间隔。如果不指定,只显示一条结果。
count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。
-d:显示磁盘相关统计信息。
-p:显示指定磁盘分区统计信息
-S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)
-V:显示vmstat版本信息。

评论

0条评论

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注