MacOS 内存清理的误区

nix是一个比 Windows 古老很多,但却先进很多的操作系统。通常应用于 服务器 。所以它的内存机制是为了减少人为工作量而设计的。OSX作为Unix的一个分支也继承了这个特点。

在Unix下就算有100G+以上的内存,也照样都吃光。我们公司的服务器就这样,128G的内存,什么时候看着都是满的。这时为什么呢?
操作系统会随着磁盘的读写把一些读取频率高的内容放入到当前的空闲内存。也就是我们所说的 硬盘 缓存。

这样做有两个好处:
1. 我们知道硬盘的速度比内存慢很多,用内存替代硬盘可以显著提高性能
2. 减少硬盘读写操作,延长硬盘寿命

其实你想想,你花了很多钱买内存不是为了让它空着的,是为了用它。所以这个机制就是尽可能的利用硬件 资源 ,让你的每分钱都花在刀刃上,是不是觉得Unix设计的很聪明?其实这还不算厉害,最厉害的地方是这个过程,完全是动态的,自动的,根本不需要人工干预,当内存使用率上来的时候系统会自动缩小缓存让位给 应用程序 ,内存使用率低的时候会扩大缓存。你是不是担心这个机制会有bug?不可靠?其实完全不用担心,因为这个机制是所有Unix系的操作系统都有的,经过了很多很多年,很多很多企业,很多很多服务器的实验,是完全可靠的。

原帖下面有人回帖说用purge命令清理内存,purge命令确实可以清理内存,但是purge的本质是把内存里作为硬盘缓存的部分清掉,这其实是没有意义的, 而且 反而会 影响 性能。purge的手册里是这样写的:

DESCRIPTION
     Purge can be used to approximate initial boot conditions with a cold disk buffer cache for performance analysis. It does not affect anonymous memory that has been allocated
     through malloc, vm_allocate, etc.

翻译过来大意是:purge是用来模拟系统刚启动的状态,是 开发 人员做性能分析的 工具
purge不是让一般 用户 没事去运行一把用的。如果你定期用purge去清理内存,就相当于你放弃了Unix的内存管理机制,让操作系统退回到Windows时代。你不愿意这样吧?

那么我们怎么知道我的计算机内存不足了呢?我们先得知道内存不足的定义是什么。

当内存不足时系统会把内存里暂时用不到的内容写到硬盘里,然后在内存里把这部分内容清空给新的程序使用。过段 时间 如果系统又需要读取刚才写到硬盘里的内存内容时,系统又得把内存里其他内容写到硬盘里,腾出空间,再把刚才存在硬盘上的内容读进内存。这种情况下会产生大量的磁盘操作,严重影响性能,我们可以考虑增加内存。

所以我们查内存是不是够用,本质上就是查内存和硬盘交换内容操作发生了多少次,每次量有多大。

具体步骤如下:
当我们运行一个程序,系统反映慢时,可以怀疑内存不足。这时在终端里里输入:
  1. vm_stat 2
复制代码
以我的机器为例,屏幕上会出现如下字符:


看起来很乱,其实很多内容你不用管,只看最后两列pageins和pageout。我机器的最后两列基本都是0,这说明系统没有内存-->硬盘的操作或者硬盘-->内存的操作。
如果这个数字很大,比如几千,而且持续一直有,就说明现在有大量的内存和硬盘交换的操作,内存吃紧,严重影响系统性能,可以考虑购买额外的内存。

不要迷信一两个 软件 甚至一两个命令能够化腐朽为神奇,可以让你省很多银子,如果purge真这么神奇的话,OSX早就把它设定成在后台每分钟自动执行了,还要让你打开终端敲命令岂不是很傻?

你可能感兴趣的:(MacOS 内存清理的误区)