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 cached Mem: 2016 1973 42 0 163 1497 -/+ buffers/cache: 312 1703 Swap: 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 //同步磁盘 但是有时高版本的内核,当前不能设置为echo 0; 引用/proc/sys/vm/drop_caches (since Linux 2.6.16)
echo 1 > /proc/sys/vm/drop_caches; to free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
echo 3 >/proc/sys/vm/drop_caches.
|
3 linux频繁写文件内存持续增加的解决办法
最近在做一个采集视频流,直接写文件保存下来的东东。 最开始由于是用ffmpeg写的,没有这个问题,后来修改成直接文件操作写视频数据。 就出来了问题。
大概就是linux 写文件太频繁了,会占用内存一部分作为cache, 以加快读取速度,写的越多,cache就越大,以至于可用内存越来越小,虽然说cache会在可用内存不够用的时候自己释放一部分。但是文件操作实际应用的时候,会导致释放一部分不够用来分配cache部分,导致程序挂掉。
解决办法: 执行命令。
sync
echo 3 > /proc/sys/vm/drop_caches 关于drop_caches值的意思,以上连接有说明。