`
javathinker
  • 浏览: 235458 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

linux下释放cache内存

 
阅读更多
细心的朋友会注意到,当你在linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching.这个问题,貌似有不少人在问,不过都没有看到有什么很好解决的办法.那么我来谈谈这个问题.

先来说说free命令

[root@server ~]# free -m
total used free shared buffers cached
Mem: 249 163 86 0 10 94
-/+ buffers/cache: 58 191
Swap: 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 -m
total used free shared buffers cached
Mem: 249 244 4 0 8 174
-/+ buffers/cache: 62 187
Swap: 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 -m
total used free shared buffers cached
Mem: 249 244 5 0 8 174
-/+ buffers/cache: 61 188
Swap: 511 0 511

MS没有任何变化,那么我能否手动释放掉这些内存呢???回答是可以的!

/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段.也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整.那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存.操作如下:

[root@server test]# cat /proc/sys/vm/drop_caches
0
首先,/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_caches
3

将/proc/sys/vm/drop_caches值设为3

[root@server test]# free -m
total used free shared buffers cached
Mem: 249 66 182 0 0 11
-/+ buffers/cache: 55 194
Swap: 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)
Writingtothisfilecauses the kernel to drop clean caches,
dentries and inodes from memory, causing that memorytobecome
free.

Tofreepagecache,useecho 1 > /proc/sys/vm/drop_caches; to
free dentries and inodes, use echo 2 > /proc/sys/vm/drop_caches;
to free pagecache, dentriesandinodes,useecho3>
/proc/sys/vm/drop_caches.

Because this is a non-destructive operationanddirtyobjects
are not freeable, the user should run sync(8) first.
分享到:
评论

相关推荐

    解决 linux 下 buffcache 占用过高的问题.docx

    在标题和描述中提到的问题,即"Linux下buff/cache占用过高",这是一个常见的系统性能优化问题,尤其是对于运行Java应用或者其他资源密集型服务的云服务器而言。这里我们将深入探讨buff/cache的作用、为何会占用过多...

    Linux内核内存Cache机制原理

    Linux内核内存Cache机制是操作系统优化性能的关键组成部分,它通过减少对主存的访问次数,提高了数据读取和写入的速度。在Linux系统中,内存Cache主要分为两种类型:Page Cache和Disk Cache,它们分别针对文件系统和...

    linux 查看 cache 中文件

    标题提到的"linux 查看 cache 中文件",指的是在Linux环境下查看内存中的缓存文件。这个功能可以通过特定的工具实现,描述中提及的“安装此工具后,可以查看系统内存中cache包含的文件”,很可能是指一个名为`ftools...

    手工释放linux内存.pdf

    在Linux环境下,内存管理是一项重要的任务,尤其在服务器环境中更是如此。随着程序的运行,Linux操作系统会利用空闲内存作为缓存,以提高文件读取效率。然而,这也可能导致看似“内存不足”的情况发生,即使应用程序...

    Linux下手动释放内存

    ### Linux下手动释放内存 在Linux系统中,内存管理是一个重要的方面,特别是在服务器环境中,合理的内存管理能够提高系统的性能和稳定性。本文将详细介绍如何通过命令手动释放Linux系统的内存,并解释这些命令背后...

    linux核心中的内存管理和缓冲机制

    1. OOM Killer:当系统内存极度紧张时,Linux会启动Out-of-Memory Killer,选择优先级低或消耗内存过多的进程进行杀死,以释放内存。 2. 内存气泡:内存气泡是一种优化技术,它允许空闲内存从一个进程转移到另一个...

    Oracle Buffer和Cache的区别

    在Linux系统中,Buffer和Cache的概念也被用于描述文件系统的状态。Buffer是指待写入磁盘的数据,它们通常与文件系统的写操作相关,比如在文件被修改后,系统会先将其内容暂存于Buffer中,然后在合适的时机(例如通过...

    Linux系统内核文件Cache管理机制

    在Linux中,文件Cache起到了内存管理与文件系统间的桥梁作用,确保数据高效地在内存和存储设备之间流动。 文件Cache主要由Page Cache和Buffer Cache两部分组成。Page Cache是更高层的概念,用于缓存文件的连续数据...

    Linux系统中的内存清理和释放命令归纳.docx

    Linux 系统中的内存清理和释放命令归纳 Linux 系统中的内存清理和释放命令是非常重要的,因为它可以帮助我们释放系统中的内存,从而提高系统的性能。在 Linux 系统中,有多种方式可以清理和释放内存,本文将对这些...

    手工释放linux内存_proc sys vm drop_caches

    在这种情况下,Linux提供了/proc/sys/vm/drop_caches接口,允许用户手动干预内核的内存管理行为。 具体来说,/proc是一个虚拟文件系统,通过它可以和内核实体进行通信。在这个目录下的sys/vm/drop_caches文件,就是...

    linux源代码分析之内存管理

    - **功能描述**:内存分配和回收机制负责动态地为进程分配和释放物理内存。它确保了内存资源的有效利用,并避免了内存泄漏等问题。 - **函数调用关系图**:此图展示了内存分配过程中各个函数之间的调用顺序,有助于...

    Linux下应用程序到底使用了多少内存

    本文将深入探讨Linux下应用程序的内存使用情况,并解析`top`命令和`free`命令提供的内存信息。 首先,当我们通过`top`命令查看内存使用情况时,要注意它显示的内存占用并不完全代表应用程序实际消耗的内存。这是...

    linux 内存清理/释放命令总结

    ### Linux内存清理与释放命令详解 #### 概述 Linux作为一种高效的服务器操作系统,在资源管理上有着卓越的表现。尤其是在内存管理方面,Linux系统倾向于利用空闲内存作为缓存,以提高文件系统的读写性能。然而,在...

    linux-memory-manage.rar_Linux 内存管理_linux_memory_内存管理 linux_内存管理

    8. OOM(Out-Of-Memory)杀手:当系统内存耗尽时,Linux会启动OOM killer,选择杀死一些进程以释放内存。选择哪个进程被杀取决于其内存使用情况和优先级。 9. 内存管理工具:`free`命令显示当前系统的内存使用情况...

    linux下内存管理

    本资料包聚焦于Linux下的内存管理,提供了深入的学习材料,旨在帮助读者理解和掌握这一关键领域。 Linux内存管理主要包括以下几个方面: 1. 物理内存(Physical Memory):Linux系统中的物理内存是指计算机硬件上...

    手工释放linux内存_procsysvmdrop_caches.pdf

    手动释放 Linux 内存 - procsysvmdrop_caches Linux 内存管理是 Linux 操作系统中一个非常重要的部分。在日常使用中,我们经常会遇到物理内存被用光的现象,特别是在频繁存取文件时。这个问题貌似有不少人在问,...

    Linux-定期清内存缓存-shell脚本

    - 当应用程序需要更多内存时,系统会自动回收部分缓存,释放内存供应用使用。 - 使用`/proc/sys/vm/drop_caches`文件可以手动清理缓存。 2. **`free`命令详解**: - `free -m`显示内存使用情况,其中 `-m` 表示...

    01-Linux内存管理之二:在X86上的虚拟内存管理.rar

    当物理内存不足时,Linux会使用交换机制,将部分内存中的数据写入交换分区(swap space)以释放物理内存。交换过程由伙伴系统和页高速缓存共同完成,涉及到 swap_out 和 swap_in 操作。虽然交换可以缓解内存压力,但...

Global site tag (gtag.js) - Google Analytics