(转)Linux 释放 cached memory(缓存内存)

it2022-05-05  109

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://duyongguang.blogbus.com/logs/125261454.html

原文地址:http://www.truevue.org/en/linux/cache-memory

linux与windows不同,会存在缓存内存,通常叫做Cache Memory。有些时候你会发现没有什么程序在运行,但是使用top或free命令看到可用内存会很少,此时查看Linux系统 /proc/meminfo 文件,会发现有一项 Cached Memory:

# >> cat /proc/meminfo MemTotal:     16414004 kBMemFree:      10278960 kBBuffers:         65588 kBCached:        1273692 kB SwapCached:      15552 kBActive:        5349400 kBInactive:       597340 kBHighTotal:           0 kBHighFree:            0 kBLowTotal:     16414004 kBLowFree:      10278960 kBSwapTotal:    33551744 kBSwapFree:     33315872 kBDirty:              64 kBWriteback:           0 kBMapped:        4662772 kBSlab:           134212 kBCommitLimit:  41758744 kBCommitted_AS:  5048776 kBPageTables:      14784 kBVmallocTotal: 536870911 kBVmallocUsed:    279436 kBVmallocChunk: 536590975 kBHugePages_Total:     0HugePages_Free:      0Hugepagesize:     2048 kB

什么是Cache Memory(缓存内存):

当你读写文件的时候,Linux内核为了提高读写效率与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存)。即使你的程序运行结束后,Cache Memory也不会自动释放。这就会导致你在Linux系统中程序频繁读写文件后,你会发现可用物理内存会很少。

其实这缓存内存(Cache Memory)在你需要使用内存的时候会自动释放,所以你不必担心没有内存可用。如果你希望手动去释放Cache Memory(缓存内存)的话也是有办法的。

释放Cache Memory(缓存内存):

用下面的命令可以释放Cache Memory:

echo 3 > /proc/sys/vm/drop_caches

 

------------------------------------------------------------------------------------------------------

原文地址2:http://hi.baidu.com/ihehua/blog/item/aec4d4c26cfee0160ff47759.html

细心的朋友会注意到,当你在linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问 题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题.先来说说free命令[root@server ~]# free -mtotal       used       free     shared    buffers     cachedMem:           249        163         86          0         10         94-/+ buffers/cache:         58        191Swap:          511          0        511其中:total 内存总数used 已经使用的内存数free 空闲的内存数shared 多个进程共享的内存总额buffers Buffer Cache和cached Page Cache 磁盘缓存的大小-buffers/cache 的内存数:used - buffers - cached+buffers/cache 的内存数:free + buffers + cached可 用的memory=free memory+buffers+cached有了这个基础后,可以得知,我现在used为 163MB,free为86,buffer和cached分别为10,94那么我们来看看,如果我执行复制文件,内存会发生什么变化.[root@server ~]# cp -r /etc ~/test/[root@server ~]# free -mtotal       used       free     shared    buffers     cachedMem:           249        244          4          0          8        174-/+ buffers/cache:         62        187Swap:          511          0        511在我命令执行结束后,used为244MB,free为4MB,buffers为8MB,cached为174MB, 天呐都被cached吃掉了.别紧张,这是为了提高文件读取效率的做法.引用[url]http://www.2qyou.com /thread-591-1-1.html[/url] 为了提高磁盘存取效率, Linux做了一些精心的设计, 除了对dentry进行缓存(用于VFS,加速文件路径名到inode的转换), 还采取了两种主要Cache方式:Buffer Cache和Page Cache。前者针对磁盘块的读写,后者针对文件inode的读写。这些Cache有效缩短了 I/O系统调用(比如read,write,getdents)的时间。"那么有人说过段时间,linux会自动释放掉所用的内存,我们 使用free再来试试,看看是否有释放>?[root@server test]# free -mtotal       used       free     shared    buffers     cachedMem:           249        244          5          0          8        174-/+ buffers/cache:         61        188Swap:          511          0        511MS没有任何变化,那么我能否手动释放掉这些内存呢???回答是可以的!/proc是一个虚拟文件系 统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段.也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出 调整.那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存.操作如下:[root@server test]# cat /proc/sys/vm/drop_caches0首先,/proc/sys/vm/drop_caches的 值,默认为0[root@server test]# sync手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行 sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件)[root@server test]# echo 3 > /proc/sys/vm/drop_caches[root@server test]# cat /proc/sys/vm/drop_caches3将/proc/sys/vm/drop_caches值设为3[root@server test]# free -mtotal       used       free     shared    buffers     cachedMem:           249         66        182          0          0         11-/+ buffers/cache:         55        194Swap:          511          0        511再来运行free命令,发现现在的used为66MB,free 为182MB,buffers为0MB,cached为11MB.那么有效的释放了buffer和cache.有关/proc/sys /vm/drop_caches的用法在下面进行了说明/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  becomefree.To  free  pagecache,  use  echo 1 > /proc/sys/vm/drop_caches; tofree 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  objectsare not freeable, the user should run sync(8) first.

转载于:https://www.cnblogs.com/seawwh/articles/2234734.html

相关资源:各显卡算力对照表!

最新回复(0)