简单的说,就是
sync
echo 3 > /proc/sys/vm/drop_caches
OK!
细心的朋友会注意到,当你在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吃掉了.别紧张,这是为了提高文件读取效率的做法.
引用http://www.wujianrong.com/archives/2007/09/linux_free.html" 为了提高磁盘存取效率, 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)
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(8) first.
对这个文件的读写会引起kernel从内存中清除抛弃干净的缓存、文件入口和inode,因此释放内存。
释放页缓存,使用命令 echo 1 > /proc/sys/vm/drop_caches;
释放dentries和inodes,使用命令 echo 2 > /proc/sys/vm/drop_caches;
释放三种,使用命令 echo 3 > /proc/sys/vm/drop_caches;
因为这事一个非析构命令,脏对象不会被释放,用户必须先运行sync。
sync是强制系统把正在处理的pagecache,entry和inode写回硬盘的命令。
具体可以 man sync。
相关推荐
在Linux系统中,内存池是一种优化内存管理的技术,尤其对于频繁分配和释放小块内存的情况,内存池可以显著提升性能并减少系统开销。本文将深入探讨Linux下的内存池实现,包括其原理、优势以及如何在C或C++中进行实践...
### 手工释放Linux内存详解 #### 一、引言 在Linux环境下,内存管理是一项重要的任务,尤其在服务器环境中更是如此。随着程序的运行,Linux操作系统会利用空闲内存作为缓存,以提高文件读取效率。然而,这也可能...
Linux支持虚拟内存(Virtual Memory),虚拟内存是指使用磁盘作为RAM的扩展,内核会将暂时不用的内存块的内容写到硬盘上,以便释放出内存空间供其他进程使用。当需要用到原始的内容时,它们被重新读入内存。 Linux...
在使用共享内存的程序异常退出时,由于没有释放掉共享内存,在调试时会出现错误。您可以使用shell命令来查看与释放已经分配的共享内存,下面将详细说明如何进行查看和释放分配的共享内存的方法。
易语言Linux内存操作源码是针对Linux操作系统设计的编程代码,主要目的是为了在Linux环境下进行内存管理与操作。易语言是一种中国本土开发的、面向普通用户的编程语言,它以其简单的语法和直观的编程界面,降低了...
Linux提供malloc和free函数供程序员分配和释放内存,实际上这些操作是由内存管理子系统处理的。内存分配可能涉及到匿名页(无文件映射的内存)和文件映射页(与磁盘文件关联的内存)。对于匿名页,Linux可能会使用...
Linux 内核内存管理 Linux 内核内存管理是操作系统中非常重要的一部分,它直接影响着系统的效率和性能。Linux 采用了伙伴系统算法来管理内存,通过将内页按 2^0, 2^1, 2^2…2^10 大小进行分组,每次分配内存时,从...
Linux内存管理是操作系统的核心组成部分,它负责有效地分配和回收内存资源,确保系统高效稳定地运行。在本实验中,我们主要探讨了Linux虚拟内存管理的原理、动态内存操作函数的使用,以及如何检测主存使用情况。 ...
Linux操作系统的内存管理机制还包括延迟分配和请页机制释放内存时,先释放线性区对应的物理内存,然后释放线性区。这就叫做延迟分配和请页机制,充分利用了程序的局部性,节约内存空间,提高系统吞吐。 Linux操作...
#### 手动释放内存的方法 **/proc/sys/vm/drop_caches** 这个文件允许用户通过写入特定值来控制内核释放不同类型的缓存数据。具体操作如下: - **echo 1 > /proc/sys/vm/drop_caches**: 释放page cache缓存。 - *...
交换机制是当物理内存不足时,Linux会将不活跃的页写入磁盘的交换分区,释放物理内存供其他进程使用。这一过程称为页面交换。当需要时,这些页面会被重新加载回内存,即页面回换。交换空间的设置和管理对系统性能有...
linux 内核 内存泄露检测 linux 内核 内存泄露检测 linux 内核 内存泄露检测 linux 内核 内存泄露检测 linux 内核 内存泄露检测
CentOS7清理yum缓存和释放内存方法是Linux系统中非常重要的一部分。yum(Yellow Dog Updater, Modified)是一个基于RPM包管理器的命令行包管理器,用于安装、卸载、升级和管理RPM包。在CentOS7系统中,yum缓存可能会...
5. **交换(Swapping)**:当物理内存不足时,Linux会将部分不活跃的进程或数据交换到磁盘上的交换分区,释放物理内存供其他进程使用。 6. **伙伴系统(Buddy System)**:用于大块内存的分配和回收,通过拆分和...
以下是Linux内存管理的一些关键知识点: 1. **内存管理工具**: - CodeViz:这是一个用于生成代码调用关系图的工具,可以帮助开发者理解代码间的调用结构,虽然在描述中没有详细展开,但它是分析Linux内核源码的...
- **功能描述**:内存分配和回收机制负责动态地为进程分配和释放物理内存。它确保了内存资源的有效利用,并避免了内存泄漏等问题。 - **函数调用关系图**:此图展示了内存分配过程中各个函数之间的调用顺序,有助于...
《嵌入式Linux内存与性能详解》一书由史子旺撰写,专注于深入解析Linux内存管理机制以及如何在嵌入式环境中优化系统性能。Linux内存管理是操作系统的核心部分,理解和掌握这一领域对于开发者来说至关重要,尤其是在...
本文将详细介绍Linux内存清理与释放的相关命令及其使用方法。 #### 重要概念 在深入讨论之前,我们首先需要了解几个重要的概念: - **free**:这是一个常用的查看系统内存状态的命令。它提供了关于系统内存使用...
linux 共享内存简单使用