free 内存检测

Posted liuzhiyun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了free 内存检测相关的知识,希望对你有一定的参考价值。

free打印出的内存信息主要分为两种,一种是安装的内存,一种是用磁盘虚拟的内存,就是这里的Swap,相信装过Linux系统的同学肯定不陌生交换分区,这里Swap大小就是我们分区的时候分配的大小。 


下面来分别解释以下每个列的意思:

total:去掉为硬件和操作系统保留的内存后剩余的内存总量。许多人奇怪自己的电脑安装了一共8G的内存,但是显示总共只有七点几G的,现在应该没什么疑惑了把,不管Linux还是Windows都会有部分内存是保留给硬件和操作系统的!
userd:当前已使用的内存总量。
free:空闲的或可以使用的内存总量
shared:共享内存大小,主要用于进程间通信
buff(buffers):主要用于块设备数据缓冲,例如记录文件系统的metadata(目录、权限等等信息)。
cache:主要用于文件内容缓冲
available:可以使用的内存总量

 

buffers与cached的区别:

对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
所以从应用程序的角度来说 可用内存=系统free memory+buffers+cached.
buffers是指用来给块设备做的缓冲大小,他只记录文件系统的metadata以及 tracking in-flight pages,cached是用来给文件做缓冲。
那就是说:buffers是用来存储,目录里面有什么内容,权限等等,而cached直接用来记忆我们打开的文件的。
关于为什么需要缓冲,这里简单解释以下:我们知道,在CPU,内存,外存的运行速度之间,存在这样的关系:
CPU比内存快100倍,内存比磁盘快十万倍,且他们之间的差距还在增大!
因此为了协调他们速度之间的不匹配,缓存就由此而生,在CPU内部的缓存,为了协调CPU和内存之间速度的不匹配,而内存的产生也是为了协调磁盘和CPU速度的不匹配。有个这样的一个形象的描述:把CPU的一个时钟周期看作一秒。那么,从L1 cache(CPU的一级缓存)读取信息就好像是拿起桌上的一张草稿纸(3秒);从L2 cache(CPU的二级缓存)读取信息则是从身边的书架上取出一本书(14秒);而从主存中读取信息则相当于走到办公楼下去买个零食(4分钟),而等待硬盘寻道的时间相当于离开办公大楼并开始长达一年零三个月的环球旅行,而这仅仅是寻道时间!

 

free的详细使用方法

语  法: free [-hbkmotV][-s <间隔秒数>]

补充说明:free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。

参  数:
-b  以Byte为单位显示内存使用情况。
-k  以KB为单位显示内存使用情况。
-m  以MB为单位显示内存使用情况。
-h   以比较人性化的方式显示内存使用情况。
-o  不显示缓冲区调节列。
-s   <间隔秒数>  持续观察内存使用状况。
-t  显示内存总和列。
-V  显示版本信息。   

 

监控系统内存并报警

获取内存大小

free -m  |awk ‘NR ==3print $NF‘

 

free -m |grep buffers\/ |awk ‘print $NF‘

 

配置邮件(centos5 默认Sendmail服务要开启,Centos6默认postfix服务要开启)

echo set from=1484029127@qq.com  smtp=smtp.qq.com smtp-auth-user=1484029127 smtp-auth-password=123456  smtp-auth=login > /etc/mail.rc

echo "LIU" | mail -s "title"  1484029127@qq.com

 

定时任务

0 9 * * * /bin/sh  /server/script/free.sh  &> /dev/null

 

cat free.sh

#/bin/bash

FREE=$(free -m  |awk ‘NR ==3print $NF‘)

chars="current memory is $cur_free"

 

if [ "$FREE" -lt 100 ];then

  echo $chars|mail -s "$chars" 1484029127@qq.com

  echo set from=1484029127@qq.com  smtp=smtp.qq.com smtp-auth-user=1484029127 smtp-auth-password=123456  smtp-auth=login > /etc/mail.rc

else

  echo "当前内存$FREE够用..."

fi

 

注:开启邮件服务,PC虚拟机测试非自己公司的邮箱可能会遇到无法收到报警的问题。

 

以上是关于free 内存检测的主要内容,如果未能解决你的问题,请参考以下文章

如何用VS工具检测内存泄露

内存泄漏检测和分析工具

Valgrind C++ 内存泄漏检测

Valgrind C++ 内存泄漏检测

检测内存的使用率

实例分析Linux内存泄漏检测方法