linux清理内存的命令 linux 清理

Linux中Cache内存占用过高解决办法在Linux系统中,linux清理内存的命令我们经常用free命令来查看系统内存的使用状态 。
默认显示单位是kb,linux清理内存的命令我的服务器是128G内存,所以数字显得比较大 。这个命令几乎是每一个使用过Linux的人必会的命令 , 但越是这样的命令,似乎真正明白的人越少(linux清理内存的命令我是说比例越少) 。一般情况下,对此命令输出的理解可以分这几个层次:
1.不linux清理内存的命令了解 。这样的人的第一反应是:天啊,内存用了好多,70个多G,可是我几乎没有运行什么大程序?。课裁椿嵴庋縇inux好占内存!
2.自以为很了解 。这样的人一般评估过会说:嗯,根据我专业的眼光看的出来 , 内存才用了17G左右,还有很多剩余内存可用 。buffers/cache占用的较多,说明系统中有进程曾经读写过文件,但是不要紧,这部分内存是当空闲来用的 。
3.真的很了解 。这种人的反应反而让人感觉最不懂Linux,他们的反应是:free显示的是这样 , 好吧我知道了 。神马?你问我这些内存够不够,我当然不知道啦!我怎么知道你程序怎么写的?
4.根据目前网络上技术文档的内容,我相信绝大多数了解一点Linux的人应该处在第二种层次 。大家普遍认为,buffers和cached所占用的内存空间是可以在内存压力较大的时候被释放当做空闲空间用的 。但真的是这样么?
在论证这个题目之前,我们先简要介绍一下buffers和cached是什么意思:
Free中的buffer和cache:(它们都是占用内存):
buffer : 作为buffer cache的内存,是块设备的读写缓冲区
cache: 作为page cache的内存, 文件系统的cache
如果 cache 的值很大,说明cache住的文件数很多 。如果频繁访问到的文件都能被cache住 , 那么磁盘的读IO bi会非常小 。
cache是高速缓存,用于CPU和内存之间的缓冲linux清理内存的命令;
buffer
是I/O缓存 , 用于内存和硬盘的缓冲
buffer和 cache 是两个在计算机技术中被用滥的名词,放在不通语境下会有不同的意义 。在Linux的内存管理中,这里的buffer指Linux内存的:Buffer cache 。这里的cache指Linux内存中的:Page
cache 。翻译成中文可以叫做缓冲区缓存和页面缓存 。在历史上 , 它们一个(buffer)被用来当成对io设备写的缓存,而另一个(cache)被用来当作对io设备的读缓存,这里的io设备,主要指的是块设备文件和文件系统上的普通文件 。但是现在 , 它们的意义已经不一样了 。在当前的内核中,page cache顾名思义就是针对内存页的缓存,说白了就是,如果有内存是以page进行分配管理的 , 都可以使用page cache作为其缓存来管理使用 。当然,不是所有的内存都是以页(page)进行管理的,也有很多是针对块(block)进行管理的,这部分内存使用如果要用到cache功能,则都集中到buffer cache中来使用 。(从这个角度出发,是不是buffer cache改名叫做block cache更好?)然而,也不是所有块(block)都有固定长度,系统上块的长度主要是根据所使用的块设备决定的,而页长度在X86上无论是32位还是64位都是4k 。
明白了这两套缓存系统的区别 , 就可以理解它们究竟都可以用来做什么了 。
Page cache主要用来作为文件系统上的文件数据的缓存来用,尤其是针对当进程对文件有read/write操作的时候 。如果你仔细想想的话,作为可以映射文件到内存的系统调用:mmap是不是很自然的也应该用到page cache?在当前的系统实现里,page cache也被作为其它文件类型的缓存设备来用,所以事实上page cache也负责了大部分的块设备文件的缓存工作 。

推荐阅读