linux内存/cpu利用率 引出vmstat命令 free命令

1.内存占用率=内存占用/总内存
memrate=memused/memtotal
我们通过free命令获取系统内存的占用情况。
free命令的原地址:
http://www.cnblogs.com/coldplayerest/archive/2010/02/20/1669949.html
讲的详细且形象,我在这只进行一些简单的整理。

下面是free的运行结果,一共有4行。为了方便说明,我加上了列号。这样可以把free的输出看成一个二维数组FO(Free Output)。例如:

FO[2][1] = 24677460
FO[3][2] = 10321516  
                   1          2          3          4          5          6
1              total       used       free     shared    buffers     cached
2 Mem:      24677460   23276064    1401396          0     870540   12084008
3 -/+ buffers/cache:   10321516   14355944
4 Swap:     25151484     224188   24927296

free的输出一共有四行,第四行为交换区的信息,分别是交换的总量(total),使用量(used)和有多少空闲的交换区(free),这个比较清楚,不说太多。
第一行的输出时从操作系统(OS)来看的。也就是说,从OS的角度来看,计算机上一共有:

24677460KB(缺省时free的单位为KB)物理内存,即FO[2][1];
在这些物理内存中有23276064KB(即FO[2][2])被使用了;
还用1401396KB(即FO[2][3])是可用的;

这里得到第一个等式:

FO[2][1] = FO[2][2] + FO[2][3]

FO[2][4]表示被几个进程共享的内存的,现在已经deprecated,其值总是0(当然在一些系统上也可能不是0,主要取决于free命令是怎么实现的)。

FO[2][5]表示被OS buffer住的内存。FO[2][6]表示被OS cache的内存。在有些时候buffer和cache这两个词经常混用。不过在一些比较低层的软件里是要区分这两个词的,看老外的洋文:

A buffer is something that has yet to be "written" to disk. 
A cache is something that has been "read" from the disk and stored for later use.

也就是说buffer是用于存放要输出到disk(块设备)的数据的,而cache是存放从disk上读出的数据。这二者是为了提高IO性能的,并由OS管理。
这里还用两个等式:

FO[3][2] = FO[2][2] - FO[2][5] - FO[2][6]
FO[3][3] = FO[2][3] + FO[2][5] + FO[2][6]

那么,我们用来计算内存占用率的占用内存其实是F0[3][2],即内存的总占用-buffer/cache(能被系统快速收回的内存)
总内存就是F0[2][1]
memrate=F0[3][2]/F0[2][1]
命令行:
memused=free -k | tail -2 | head -1|awk ‘{print $3}’
memtotal=free -k | tail -3 | head -1|awk ‘{print $2}’

2.获取cpu利用率
我们可以通过vmstat命令来获取cpu利用率
vmstat命令原地址:
http://www.cnblogs.com/ggjucheng/archive/2012/01/05/2312625.html

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

root@ubuntu:~# vmstat 2 1
procs -----------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

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

在计算cpurate的时候,建议多获取几次,尤其是在脚本里获取cpyrate时,一般只获取一次是不准确的,建议在脚本里取两次以上并排除掉第一次的数据。
如:

id=vmstat 1 2|tail -1 | awk '{print $15}'

获取第二次的空闲cpurate = 1-id%
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值