<span id='metc2'></span>
    <i id='metc2'><div id='metc2'><ins id='metc2'></ins></div></i><ins id='metc2'></ins><fieldset id='metc2'></fieldset>
  • <i id='metc2'></i>

        <dl id='metc2'></dl>
          <acronym id='metc2'><em id='metc2'></em><td id='metc2'><div id='metc2'></div></td></acronym><address id='metc2'><big id='metc2'><big id='metc2'></big><legend id='metc2'></legend></big></address>
        1. <tr id='metc2'><strong id='metc2'></strong><small id='metc2'></small><button id='metc2'></button><li id='metc2'><noscript id='metc2'><big id='metc2'></big><dt id='metc2'></dt></noscript></li></tr><ol id='metc2'><table id='metc2'><blockquote id='metc2'><tbody id='metc2'></tbody></blockquote></table></ol><u id='metc2'></u><kbd id='metc2'><kbd id='metc2'></kbd></kbd>

          <code id='metc2'><strong id='metc2'></strong></code>

            手工释放Linux系统进程占用的内存

            • 时间:
            • 浏览:9
            • 来源:124软件资讯网

              总有许多朋侪对于Linux的内存治理有疑问  ,之前一篇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为86MB  ,buffer和cached划分为10MB  ,94MB  。

                那么我们来看看,若是我执行复制文件,内存会发生什么转变.

                [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吃掉了  。别重要 ,这是为了提高文件读取效率的做法  。

                为了提高磁盘存取效率  ,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

                似乎没有任何转变  。(现实情形下  ,内存的治理还与Swap有关)

                那么我能否手动释放掉这些内存呢  ?回覆是可以的  !

                二、手动释放缓存

                /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 ech12下一页