`

Linux下内存释放问题相关知识

阅读更多
细心的朋友会注意到,当你在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.
分享到:
评论

相关推荐

    Linux内核内存管理

    Linux 中的内存管理方式可以分为三个部分:准备知识、有关的数据结构和实现分析。 准备知识部分主要讲解了 Linux 内核中的内存管理方式,包括内存管理的重要性、伙伴系统算法的原理和实现。 有关的数据结构部分...

    易语言linux内存操作源码

    通过学习和理解这些知识点,可以更好地理解和使用易语言Linux内存操作源码,从而在Linux环境下编写高效、稳定的程序。同时,易语言的用户应当注意,由于Linux内存管理与Windows等其他系统有很大差异,因此需要具备...

    嵌入式Linux内存与性能详解

    嵌入式Linux系统在各种设备和应用中广泛使用,其...通过学习《嵌入式Linux内存与性能详解》,开发者可以更好地理解和掌握嵌入式Linux环境下的内存管理技术,从而提升系统效率和稳定性,满足各类嵌入式设备的严格要求。

    linux内存管理实验报告

    Linux内存管理是操作系统的核心组成部分,它负责...实验总结表明,通过实践操作,学生对Linux内存管理有了更深入的理解,并且能够应用于实际问题中,这对于未来深入学习操作系统和其他系统级编程有着积极的推动作用。

    linux下检查内存泄漏的工具+例子

    总之,掌握Valgrind的使用,可以帮助程序员在Linux环境下更有效地发现和修复内存泄漏问题,提高软件质量,保障系统的稳定运行。请确保仔细阅读提供的文档,实践操作,以便深入理解和应用这些知识。

    linux源代码分析之内存管理

    ### Linux源代码分析之内存管理 #### 摘要与关键词 本文档是对Linux内核内存管理系统的一个深入分析,特别是针对其源代码进行了详细的解读。Linux的内存管理是内核中最复杂的部分之一,它涉及到了内存初始化、地址...

    linux内存管理总结

    以下是Linux内存管理的一些关键知识点: 1. **内存管理工具**: - CodeViz:这是一个用于生成代码调用关系图的工具,可以帮助开发者理解代码间的调用结构,虽然在描述中没有详细展开,但它是分析Linux内核源码的...

    Linux 内存释放命令详解

    以上内容比较简单,成功的给大家介绍了Linux 内存释放命令的知识,希望能够帮助到大家! 您可能感兴趣的文章:php查找指定目录下指定大小文件的方法linux下查看内存条数及每根内存大小的实现方法(推荐)linux查看文件...

    深入理解Linux虚拟内存管理_英文原版

    7. **内存压缩**:在某些情况下,Linux可以将内存中的数据进行压缩,从而腾出更多的物理内存供其他进程使用。这在一定程度上缓解了内存不足的问题。 8. **交换空间**:交换空间是磁盘上的一个特殊区域,用于存储...

    易语言源码易语言linux内存操作源码.rar

    在“易语言源码易语言linux内存操作源码.rar”这个压缩包中,我们关注的重点是易语言在Linux环境下的内存操作。下面将详细讲解相关知识点。 内存操作在编程中扮演着至关重要的角色,它涉及到程序运行时数据的存储和...

    Linux内存管理 vs. Windows 2000内存管理

    - **Linux内存模型**:Linux采用的是完全分页的内存模型,这意味着所有物理内存都被划分为固定大小的页面(通常为4KB),并且每个进程都有自己的独立地址空间。Linux支持物理内存和虚拟内存的概念,通过页表映射...

    linux内核知识系列:内存管理

    本篇文章将深入探讨Linux内核内存管理的关键概念、机制以及相关的策略。 1. **内存区域(Memory Zones)** Linux将物理内存划分为不同的区域,如DMA区(直接内存访问)、正常区、高内存区等,以便于管理和优化不同...

    linux下的内存管理源代码

    ### Linux内存管理概述 Linux内核的内存管理是其核心功能之一,负责处理进程的虚拟地址空间、物理内存分配与回收、页面置换算法、缓存管理等关键任务。然而,本段代码展示的是一个简化的内存管理模型,用于教学和...

    linux 进程内存管理 LinuxMemoryManagement

    总的来说,Linux进程内存管理是软件开发中的核心概念,理解和掌握这些知识对于编写高效、健壮的程序至关重要。程序员需要熟悉地址空间的组织、内存分配机制以及如何在实践中进行有效的内存管理,以充分利用系统资源...

    linux 内存运行原理自己的总结

    本文将深入探讨Linux内存运行原理,重点关注SLAB内存管理机制以及如何进行内存泄漏分析。 1. **Linux内存架构** - 物理内存:计算机硬件提供的RAM,用于存储程序和数据。 - 逻辑地址与物理地址:进程看到的是逻辑...

    在linux下模拟linux操作系统内存管理以及分配

    - **内存释放**:回收不再使用的内存块,确保内存的有效利用。 - **内存碎片处理**:避免或减少内存碎片,保持内存分配的高效性。 6. **makefile**: `makefile`是构建项目的关键文件,它包含了编译、链接等步骤...

    深入理解Linux虚拟内存管理CD.rar

    Linux虚拟内存管理是操作系统核心的重要组成部分,它负责为运行中的进程分配和管理内存...理解和掌握这些知识点对于Linux系统管理员、开发者和性能优化人员来说至关重要,能够帮助他们更好地管理和优化系统的内存资源。

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

    以下是关于Linux内存管理的关键知识点: 1. 物理内存:在Linux中,物理内存是指计算机硬件中的RAM,分为用户空间和内核空间。用户空间供应用程序使用,内核空间由操作系统管理,执行内核功能。 2. 虚拟内存:Linux...

    linux堆内存分析

    Linux下的堆内存分析涉及到操作系统如何管理和分配内存,特别是动态内存的使用。堆内存是程序运行时动态分配的主要区域,它的特点是可分配空间大且操作灵活,但管理复杂,容易产生内存泄露和内存碎片。 1. **接口与...

Global site tag (gtag.js) - Google Analytics