<code id='0ybos'><strong id='0ybos'></strong></code>
    <fieldset id='0ybos'></fieldset>
  1. <tr id='0ybos'><strong id='0ybos'></strong><small id='0ybos'></small><button id='0ybos'></button><li id='0ybos'><noscript id='0ybos'><big id='0ybos'></big><dt id='0ybos'></dt></noscript></li></tr><ol id='0ybos'><table id='0ybos'><blockquote id='0ybos'><tbody id='0ybos'></tbody></blockquote></table></ol><u id='0ybos'></u><kbd id='0ybos'><kbd id='0ybos'></kbd></kbd>
  2. <ins id='0ybos'></ins>

      1. <i id='0ybos'></i>
        <i id='0ybos'><div id='0ybos'><ins id='0ybos'></ins></div></i>
          <dl id='0ybos'></dl>
        1. <acronym id='0ybos'><em id='0ybos'></em><td id='0ybos'><div id='0ybos'></div></td></acronym><address id='0ybos'><big id='0ybos'><big id='0ybos'></big><legend id='0ybos'></legend></big></address>

          <span id='0ybos'></span>

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

          • 时间:
          • 浏览:3
          • 来源: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下一页