如果一天工作结束后我有很多“不活动”的记忆,那意味着什么?


21

在运行Mac OS X 10.6.5的MacBook Pro上工作了一天之后,活动监视器显示我计算机的8 GB内存中的大部分为“不活动”,而饼图中的一小部分为“免费”。即使关闭了所有应用程序且仅运行Finder时,也是如此。

这意味着什么?“非活动”内存是否被某些东西占用?还是实际上仍然可供应用程序使用?谢谢。


Answers:


27

与大多数现代操作系统一样,OS X使用虚拟内存系统来管理内存。除其他目的外,这允许操作系统将计算机视为具有无限的内存池。为此,操作系统会将未使用的RAM部分分页到称为swapfile的磁盘存储中。

当然,RAM不是无限的,因此OS X将RAM分为四类:有线,活动,非活动和空闲。操作系统需要有线内存,并且永远不能将其调出内存。活动内存是当前正在运行的程序使用的内存。最近已被终止(或很长时间未使用)的程序使用了不活动的内存。免费内存,顾名思义,就是不使用RAM。

启动程序时,它将被加载到活动内存中。但是,当您退出程序时,不会将其从RAM中删除。而是撞到不活动的内存中。这就是为什么重新启动程序通常更快的原因-它仍然在RAM中(尝试使用像Firefox这样的大型程序进行此操作)。

一旦使用完所有内存(可用内存为0),操作系统就会将非活动内存写出到交换文件中,以在活动内存中留出更多空间。

如果某个程序被调出到交换文件,然后重新启动它,它将从交换文件中拉入活动内存。

简而言之,您实际上不关心空闲内存是否不足。实际上,您希望它低一些-空闲内存是浪费的内存(因为OS并未将其用于任何事情)。

在检查计算机使用的内存量时,实际上您主要需要注意Swap usedPage ins,后者告诉您虚拟内存交换文件的大小,而Page ins则告诉您操作系统多长时间从交换文件中提取内存。进入活动内存。


2
我发现分页输出比分页输入更好地指示交换使用,因为分页输入包括加载程序以及从交换文件加载。
戈登·戴维森

1
在活动监视器中,我的VM大小超过160 GB!我的计算机上实际上有那么大的交换文件吗?
hpy

1
@penyuan:否。从理论上讲,这是交换文件的大小,但是交换文件的实际大小在“活动监视器”中标记为“ 交换”
mipadi

1
正如您所说,非活动内存部分是,尽管它专门是文件系统或库的高速缓存,可能会被应用程序重新访问,但它也是当前运行的已分配但在一段时间内未访问的应用程序的内存块(不确定时间的确切长度)。内核将那些标记为“不活动”,以便在可用内存量下降得太低时优先处理它们以便分页到磁盘。
drfrogsplat

2
@deceze:非活动内存被调出。当不再需要活动内存时,活动内存将变为不活动状态。我想如果您的内存太少,以至于没有活动内存的空间,活动内存将被直接分页到磁盘,但这是一种特殊情况。确实,交换文件在理论上确实会无限期地增长(直到没有更多的磁盘空间为止),但这也是极少数的情况。
mipadi

9

这很可能不是问题,并且实际上可能会加快计算机的速度。

所有(大多数?)操作系统都使用磁盘缓存,该磁盘缓存将一些最近访问的文件存储在内存中,从而可以加快对这些文件的重复访问。OS X上的磁盘缓存大小可变,并且将显示为正在使用的“非活动内存”。

如果任何程序需要更多的内存,则OS X将清除一些磁盘缓存(最近最少使用的文件),以留出空间来运行/扩展程序。

我发现如果我进行大量编译或照片分类(即,连续访问数千个文件),则磁盘缓存将扩展并使用大量的非活动内存。仅提供此磁盘缓存,就不用担心了。

如果是后台进程或应用程序正在扩大其内存使用量(但其页面被标记为非活动状态),则可以通过在Activity Monitor中检查“ Real Memory”使用率很高的程序来判断。如果那里没有明显的大容量(即总容量不足8GB),那么它将是文件缓存。

您应该看到几乎没有Swap用法,并且如果您打开一个内存密集型程序,则无需交换磁盘就可以减少不活动内存的数量。

(我相信在10.4或10.5中存在一段时间的错误,该错误有时并不总是非常有效地释放该内存,尽管具有很大的磁盘缓存,也会引起交换,但是以我的经验,这似乎在10.6中已解决)。


不活动的内存实际上是RAM,而不是已分页到磁盘的内存。
mipadi

3

“非活动”内存可供其他程序使用-只是缓存您最近使用的程序或数据,以防您再次需要它们。如果您启动其他程序或需要其他数据,则缓存的内存将被清除,并根据需要可用于新的工作负载。

无论如何,这就是理论,我相信这是合理的。但是,我确实找到了有人写的“清除”实用程序的引用,因为他们认为不活动的内存释放得不够快。

有关该主题的官方文档,请阅读此内容(并搜索“无效”)。


记录下来,我的MBP当前说:空闲58 MB,有线239 MB,活动1.84 GB,不活动900 MB-系统运行得很好。
Michael H.

1
我发现清除命令是上帝发送的工具。使用Photoshop + Firefox + Illustrator + Netbean + SmartGit可以轻松使4Gb iMac爬行到死地。当然,Firefox是主要的罪魁祸首,但是如果您想加快速度,请退出Firefox并再次发出“ purge&” as new as good
Antony

2
Purge的手册页实际上说,它只是为了刷新磁盘高速缓存而写(不是匿名的mem:堆栈,堆或写入时复制)用于性能分析(正是因为磁盘高速缓存可以加快系统速度)。它的编写不是为了更快地发布,因为执行它的速度比内核在需要时动态回收内存的速度慢。关闭应用程序会完全删除所有分配的内存,如果之后清除它,则会使应用程序加载速度降低,请参阅linuxatemyram.com/play.html。我猜想清除有一些心理上的问题,就像强迫性清空垃圾一样。
Jano

1

从OS X 10.5开始,MAC OS X中明显存在内存管理问题。

我终于设法重现了有问题的情况,因此我进行了测试并将屏幕记录为视频。

MAC OS X Lion性能问题-损坏的内存管理

我在我的图片/文件夹中的大量图片文件上运行tar + bzip命令,这是基本的unix东西。在开始之前,我运行“清除”命令,以删除不活动/缓存的程序数据。

您可以在视频中看到可用内存开始迅速下降,并且闲置状态不断上升。如果您查看“ bsdtar”命令,它仅占用一部分RAM,因此问题不在此过程中。您不能说这是程序内存泄漏,因为那样的话问题不会出在不活动的ram上,而应该是活动/有线的。

当可用内存降到100mb以下时,我启动了某些应用程序,例如Safari,iPhoto和MS Word,您可以在视频中看到,启动应用程序甚至需要几分钟,而通常情况下(有可用RAM时)加载大约需要3-5秒。

我在Linux Centos 6机器上运行相同的场景和相同的命令,那里没有问题!内存使用量约为10-20mb,缓存/缓冲区没有问题。

在Mac OS X中,内存管理必须非常中断!


1
您所描述的某些内容可能构成另一个问题的基础,但这并不是对该问题的答案。
Graham Perrin

2
我要说的是,您对可用内存的描述迅速减少到了设定点,并且系统将所有剩余的非活动RAM和有线RAM累积为非活动状态,这表明系统正在按设计工作。仅仅因为一个操作系统与另一个操作系统上的内存管理不同,并不意味着它在两个操作系统上都被破坏了。优化选择总是不利的一面。
bmike

0

仅当“可用内存不足时您的计算机将运行得更快”的说法是正确的,此讨论才有意义。除非我的台式机Mac接线异常,否则我的可用内存(受监控)开始变少的那一刻,我当时运行的任何程序开始陷入瘫痪,直到我无法执行任何操作,直到它自行恢复或由我的自由记忆干预。我有一个iMac 2118(2006年或更高版本),其最大内存为3 GB,因此我会尽可能地尝试对其进行管理,但这非常令人沮丧。有什么想法吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.