摘要: 总有很多朋友对于Linux的内存管理有疑问,之前一篇linux下的内存管理方式似乎也没能清除大家的疑虑。而在新版核心中,似乎对这个问题提供了新的解决方法,特转出来给大家参考一下。最后,还附上我对这方法的意见,欢 ... 总有很多朋友对于Linux的内存管理有疑问,之前一篇linux下的内存管理方式似乎也没能清除大家的疑虑。而在新版核心中,似乎对这个问题提供了新的解决方法,特转出来给大家参考一下。最后,还附上我对这方法的意见,欢迎各位一同讨论。 一、通常情况先来说说free命令: ·········10········20········30········40········50········60········70········80········90 1. # free -m 2. total used free shared buffers cached 3. Mem: 249 163 86 0 10 94 4. -/+ buffers/cache: 58 191 5. Swap: 511 0 511 其中:
有了这个基础后,可以得知,我现在used为163MB,free为86MB,buffer和cached分别为10MB,94MB。 ·········10········20········30········40········50········60········70········80········90 1. # cp -r /etc ~/test/ 2. # free -m 3. total used free shared buffers cached 4. Mem: 249 244 4 0 8 174 5. -/+ buffers/cache: 62 187 6. Swap: 511 0 511 在我命令执行结束后,used为244MB,free为4MB,buffers为8MB,cached为174MB,天呐,都被cached吃掉了。别紧张,这是为了提高文件读取效率的做法。 ·········10········20········30········40········50········60········70········80········90 1. # free -m 2. total used free shared buffers cached 3. Mem: 249 244 5 0 8 174 4. -/+ buffers/cache: 61 188 5. Swap: 511 0 511 似乎没有任何变化。(实际情况下,内存的管理还与Swap有关)那么我能否手动释放掉这些内存呢?回答是可以的! 二、手动释放缓存/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文 件,来对当前kernel的行为做出调整。那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存。操作如下: ·········10········20········30········40········50········60········70········80········90 1. # cat /proc/sys/vm/drop_caches 2. 0 首先,/proc/sys/vm/drop_caches的值,默认为0。 ·········10········20········30········40········50········60········70········80········90 1. # sync 手动执行sync命令(描述:sync 命令运行 sync 子例程。如果必须停止系统,则运行sync 命令以确保文件系统的完整性。sync 命令将所有未写的系统缓冲区写到磁盘中,包含已修改的 i-node、已延迟的块 I/O 和读写映射文件) ·········10········20········30········40········50········60········70········80········90 1. # echo 3 > /proc/sys/vm/drop_caches 2. # cat /proc/sys/vm/drop_caches 3. 3 将/proc/sys/vm/drop_caches值设为3 ·········10········20········30········40········50········60········70········80········90 1. # free -m 2. total used free shared buffers cached 3. Mem: 249 66 182 0 0 11 4. -/+ buffers/cache: 55 194 5. Swap: 511 0 511 再来运行free命令,会发现现在的used为66MB,free为182MB,buffers为0MB,cached为11MB。那么有效的释放了buffer和cache。
三、我的意见上述文章就长期以来很多用户对Linux内存管理方面的疑问,给出了一个比较“直观”的回复,我更觉得有点像是核心开发小组的妥协。对于是否需要使用这个值,或向用户提及这个值,我是有保留意见的。 不像windows,无论你的真实物理内存有多少,他都要拿硬盘交换文件来读。这也就是windows为什么常常提示虚拟空间不足的原因,你们想想 多无聊,在内存还有大部分的时候,拿出一部分硬盘空间来充当内存。硬盘怎么会快过内存,所以我们看linux,只要不用swap的交换空间,就不用担心自 己的内存太少。如果常常swap用很多,可能你就要考虑加物理内存了,这也是linux看内存是否够用的标准哦。当然这仅代表我个人意见,也欢迎大家来交 流讨论。 |
|