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%