博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于free命令 内存的详细介绍以及如何手动释放内存
阅读量:4167 次
发布时间:2019-05-26

本文共 2458 字,大约阅读时间需要 8 分钟。

1 free命令

  free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内核使用的内存缓冲区。

 total:去掉为硬件和操作系统保留的内存后剩余的内存总量。许多人奇怪自己的电脑安装了一共8G的内存,但是显示总共只有七点几G的,现在应该没什么疑惑了把,不管Linux还是Windows都会有部分内存是保留给硬件和操作系统的!

userd:当前已使用的内存总量。

free:空闲的或可以使用的内存总量

shared:共享内存大小,主要用于进程间通信 buff(buffers):主要用于块设备数据缓冲,例如记录文件系统的metadata(目录、权限等等信息)。

cache:主要用于文件内容缓冲

available:可以使用的内存总量 -

语法

free(选项)

选项

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

实例

free -m             total       used       free     shared    buffers     cachedMem:          2016       1973         42          0        163       1497-/+ buffers/cache:        312       1703Swap:         4094          0       4094

第一部分Mem行解释:

total:内存总数;used:已经使用的内存数;free:空闲的内存数;shared:当前已经废弃不用;buffers Buffer:缓存内存数;cached Page:缓存内存数。

关系:total = used + free

第二部分(-/+ buffers/cache)解释:

(-buffers/cache) used内存数:第一部分Mem行中的 used – buffers – cached(+buffers/cache) free内存数: 第一部分Mem行中的 free + buffers + cached

可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。

第三部分是指交换分区。

 

2 需要注意的是:如果系统本身caches有问题,无法循环利用内存,那么可以通过人工命令:

1     sync  //同步磁盘

2   echo 3 > /proc/sys/vm/drop_caches
释放了缓存之后想恢复成之前默认的0
3  echo 0 > /proc/sys/vm/drop_caches  
-bash: echo: write error: Invalid argument

但是有时高版本的内核,当前不能设置为echo 0;

VOID release_memory()
{
    //将内存缓冲区内的数据写入磁盘
    system("sync");
    //free pagecache, dentries and inodes
    system("echo 3 > /proc/sys/vm/drop_caches");
    //system("echo 0 > /proc/sys/vm/drop_caches");
    //内核版本不支持echo 0
}
为了提高磁盘存取效率,Linux做了一些精心的设计,除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换),还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。 --

引用/proc/sys/vm/drop_caches (since Linux 2.6.16)

Writing to this file causes the kernel to drop clean caches,dentries and inodes from memory, causing that memory to become free.

To free pagecache, use

 echo 1 > /proc/sys/vm/drop_caches;

 to free dentries and inodes, use

echo 2 > /proc/sys/vm/drop_caches;

to free pagecache, dentries and inodes, use

 echo 3 >/proc/sys/vm/drop_caches.

Because this is a non-destructive operation and dirty objects are not freeable, the user should run sync first.

3  linux频繁写文件内存持续增加的解决办法

 

最近在做一个采集视频流,直接写文件保存下来的东东。 最开始由于是用ffmpeg写的,没有这个问题,后来修改成直接文件操作写视频数据。 就出来了问题。 

 

大概就是linux 写文件太频繁了,会占用内存一部分作为cache, 以加快读取速度,写的越多,cache就越大,以至于可用内存越来越小,虽然说cache会在可用内存不够用的时候自己释放一部分。但是文件操作实际应用的时候,会导致释放一部分不够用来分配cache部分,导致程序挂掉。

解决办法: 执行命令。

sync

echo 3 > /proc/sys/vm/drop_caches 关于drop_caches值的意思,以上连接有说明。

转载地址:http://qkexi.baihongyu.com/

你可能感兴趣的文章
初识单片机
查看>>
在单片机上点亮LED
查看>>
初学定时器
查看>>
数码管
查看>>
单片机数码管消隐及中断
查看>>
C#串口调试助手代码
查看>>
学习DS1820随记
查看>>
初学C#之windowes窗口应用文件
查看>>
linux常用命令
查看>>
Linux之vim(一)vim简介
查看>>
进程间通信的方式简单解析————管道
查看>>
git学习笔录
查看>>
Activity类中7个与活动生命周期回调有关的方法
查看>>
jwt与token+redis,哪种方案更好用?
查看>>
Comparator接口
查看>>
在二叉树中找到一个节点的后继节点
查看>>
寻找第K大
查看>>
String.trim
查看>>
缓存行 伪共享
查看>>
400 : perceived to be a client error 错误
查看>>