`
wbj0110
  • 浏览: 1566491 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

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下内存释放问题[归纳].pdf

    Linux下内存释放问题[归纳].pdf

    Linux共享内存的查看和删除

    在使用共享内存的程序异常退出时,由于没有释放掉共享内存,在调试时会出现错误。您可以使用shell命令来查看与释放已经分配的共享内存,下面将详细说明如何进行查看和释放分配的共享内存的方法。

    Linux虚拟内存管理.pdf

    Linux支持虚拟内存(Virtual Memory),虚拟内存是指使用磁盘作为RAM的扩展,内核会将暂时不用的内存块的内容写到硬盘上,以便释放出内存空间供其他进程使用。当需要用到原始的内容时,它们被重新读入内存。 Linux...

    Linux下手动释放内存

    通过命令手动释放内存,然后可以查看内存使用情况

    手工释放linux内存.pdf

    维护 优化 针对linux应用过程中的程序系统优化,提升性能及升级使用

    应用 Valgrind 发现 Linux 程序的内存问题

    应用 Valgrind 发现 Linux 程序的内存问题,内存泄露,多次释放等的自动检测!

    linux下释放cache内存

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

    Linux 内存释放命令详解

    您可能感兴趣的文章:php查找指定目录下指定大小文件的方法linux下查看内存条数及每根内存大小的实现方法(推荐)linux查看文件系统块大小与内存页大小的简单方法查看Linux内存条数与清理内存的命令方法

    linux下检测内存泄漏

    在 windows 下使用 VC 编程时,我们通常需要 DEBUG 模式下运行程序,而后调试器将在退出程序时,打印出程序运行过程中在堆上分配而没有释放的内存信息,其中包括代码文件名、行号以及内存大小。该功能是 MFC ...

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

    本篇文章主要介绍了linux 内存清理/释放命令,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

    易语言linux内存操作源码

    易语言linux内存操作源码。@易语言资源网站。

    linux下释放经常拷贝文件导致的缓存占用[归类].pdf

    Linux 下释放经常拷贝文件导致的缓存占用 什么是缓存? 缓存是一种机制,用于提高文件读取的性能。当我们频繁地存取文件时,Linux 会将这些文件缓存在内存中,以便下次快速访问。这使得系统性能得到了提高。 缓存...

    linux C 内存池实现

    C语言实现的内存池!j利用默认的内存管理函数new/delete或malloc/free在堆上分配和释放内存会有一些额外的开销。

    手工释放linux内存_procsysvmdrop_caches.pdf

    下面我们来讨论这个问题,并提供一个手动释放 Linux 内存的解决方案。 free 命令 在讨论 Linux 内存管理之前,我们需要先了解 free 命令。free 命令可以显示系统当前的内存使用情况。下面是一个 free 命令的示例:...

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

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

    一种Linux多线程应用下内存池的设计与实现.pdf

    3. 内存释放机制:我们可以使用动态调整机制来释放内存,以避免内存泄露。 内存池的实现: 在实现内存池时,我们可以使用数组基础的链表机制来提高内存池的效率。我们可以将内存块分配和释放机制分开,以避免内存...

    Linux+C语言+内存越界问题总结[文].pdf

    Linux+C语言+内存越界问题总结 在 Linux 操作系统中,C 语言是最常用的编程语言之一,而内存越界问题是项目开发中比较难解决的问题。本文将对内存越界问题进行总结,包括内存越界的种类、现象及引起的原因。 进程...

    Linux攻略:让系统内存不再泄漏的好方法

    内存泄漏指的是程序员动态分配了内存,但是在使用完成后却忘了将其释放。除了内存泄漏以外,在开发人员自己管理内存的开发中,缓冲溢出、悬摆指针等其它一些内存的问题也时有发生。现在已经有了一些实时监测内存问题...

    [linux怎么看内存使用率]linux查看内存使用率.docx

    有些区域,比如匿名内存映射(mmps)和共享内存区域,它们被报告为缓存,但不是被核心直接释放。一般的缓存不映射到进程的地址空间,仅仅是简洁的核心映射,而这些特殊的缓存映射到全部挂接到它们上面的进程。 了解...

    嵌入式Linux性能详解-Linux内存管理

    很好的嵌入式教材 讲解了: 进程,内存测量,linux内核的内存管理,内存分配和释放,以及内存空洞,内存优化等内容

Global site tag (gtag.js) - Google Analytics