关于free命令 内存的详细介绍以及如何手动释放内存

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  //同步磁盘
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值的意思,以上连接有说明。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Linux系统中,手动释放buff/cache可以通过以下步骤实现: 1. 打开终端,以root用户身份登录。 2. 输入以下命令,清除页面缓存: ``` sync && echo 1 > /proc/sys/vm/drop_caches ``` 3. 输入以下命令,清除目录项和inode缓存: ``` sync && echo 2 > /proc/sys/vm/drop_caches ``` 4. 输入以下命令,清除页面缓存、目录项和inode缓存: ``` sync && echo 3 > /proc/sys/vm/drop_caches ``` 5. 执行完以上命令后,可以使用free命令查看系统内存使用情况,确认缓存已经被释放。 ### 回答2: 在Linux系统中,为了提高系统的性能和效率,内核会缓存一些磁盘数据和文件系统元数据,这些缓存被称为Buffer Cache和Page Cache。当需要访问这些数据时,内核可以更快地响应请求,因为数据已经缓存到了内存中。 然而,如果系统内存不足,这些缓存可能会占用大量的内存空间,从而导致性能下降。此时,我们可以手动释放内核缓存,以便让系统重新获得可用内存释放Buffer Cache的方法是通过sync命令将缓存中的数据写回到磁盘,并通过echo命令将三个值写入/proc/sys/vm/drop_caches文件中,以清空缓存。具体来说,这三个值分别是: 1. 清空pagecache echo 1 > /proc/sys/vm/drop_caches 2. 清空dentries和inodes缓存 echo 2 > /proc/sys/vm/drop_caches 3. 清空所有缓存 echo 3 > /proc/sys/vm/drop_caches 需要注意的是,由于释放内核缓存可能会导致性能下降,因此在正常情况下不建议经常手动释放缓存。这种操作最好只在特定的情况下进行,例如需要释放大量内存的时候,或者在进行性能测试和调试时。 ### 回答3: 在Linux系统下,buff/cache用于加速磁盘IO的读写操作,通过暂存文件数据到内存中,当下一次访问相同的数据时,就可以直接从内存中读取,从而大大提高磁盘读写速度。但是,当系统的内存资源紧张时,buff/cache会占用过多的内存资源,导致系统运行缓慢甚至崩溃。针对这种情况,可以手动释放buff/cache以释放内存手动释放buff/cache有多种方法。其中一种常用的方法是通过使用sync命令和echo命令,将缓存中的数据立即写入磁盘中并将buff/cache释放。 1.sync命令 sync命令用于将内存中的数据同步到磁盘中,确保数据不会因为系统崩溃而丢失。使用sync命令时,需要将所有数据都写入磁盘中,这也会将buff/cache中的数据写入磁盘中。 输入命令: ```shell sync ``` 执行该命令后,系统会将所有数据同步到磁盘中,包括buff/cache中的数据。 2.echo命令 除了使用sync命令,还可以使用echo命令释放buff/cache。echo命令用于向文件中输出字符串,并将其显示到终端中。当向/sys文件系统中的drop_caches文件写入数字1时,系统就会释放buff/cache。 输入命令: ```shell echo 1 > /proc/sys/vm/drop_caches ``` 执行该命令后,系统会释放buff/cache中的数据,并将释放内存返回给系统。需要注意的是,该命令只会释放buff/cache,不会释放交换空间。 3.清理Swap 在释放Buff/Cache的同时,如果我们也需要同时释放swap,则可以使用swapoff命令关闭swap,并使用swapon命令重新打开它。这会清除所有的交换空间缓存,进一步释放系统内存。 输入命令: ```shell swapoff -a && swapon -a ``` 执行该命令后,系统会关闭并重新打开交换空间,从而清除所有的交换空间缓存,释放系统内存。需要注意的是,该命令会影响正在使用swap的进程和服务,需要谨慎使用。 总之,手动释放buff/cache是一种有效地释放系统内存的方法,在多进程、高负载的系统环境中尤为重要。但是,为了不影响系统的稳定和正常运行,我们需要根据实际需求和系统状态选择适当的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值