@
wuqiangroy 其实已经出现因为内存不足而影响性能的情况了
苹果的文档:
https://support.apple.com/zh-cn/guide/activity-monitor/actmntr1004/mac截图的数据解读如下:
整台电脑一共有 8GB 的物理内存
被使用的部分为:
作为支持程序运行的部分:7.01 GB
作为缓存,以提升程序或者文件的访问速度的部分:956.4 MB ÷ 1024 = 0.93 GB
实际剩余的物理内存大小:8 - 7.01 - 0.93 = 0.06 GB
在 7.01GB 的数据中,有 3.37GB 是不能直接访问的,而是被压缩的。
内存压缩是什么:由于在 SSD 上使用交换文件的性能比较低,因此,可以在内存上开辟交换空间来提升系统的响应速度。数据存储进去之前需要进行压缩,读取之前需要解压缩,并放在苹果所说的“App 内存”区域,才能被程序使用。
这样做可以在比较小的内存下获得比较不错的性能。Windows 和 Linux 都支持这样的技术。
对于大多数程序和文本数据,可以压缩到原本的 1/3 大小,因此,其中包含的内存数据解压缩之后约有 3.37 × 3 = 10.11GB 。
如果你有用过内存超级大的 Mac 机,会发现“被压缩”部分的内存很少,甚至是 0 。因为内存负载还没有达到换页的阈值,系统只会直接使用物理内存。压缩和解压需要消耗 CPU 资源。
剩下 7.01 - 3.37 = 3.64 GB 可供系统和应用程序使用
其中包含了被苹果称为“联动内存”的数据,有 1.57 GB ,即“无论如何都无法放到交换中,只能保留在物理内存里的数据”。一般都是系统的核心进程数据,显存,或者硬件虚拟化使用的内存空间。
注:上面所述的交换包含两部分,一部分在硬盘文件里,另一部分压缩后保存在内存上。“联动内存”无法被换页到这些地方。
最后真正能被程序使用的部分,只有物理内存上面的 1.54 GB 那么大。
而且实际上这部分空间已经不能再增长了,如果想增长,有两个方法:
1. 放弃文件缓存,这可能会导致非常糟糕的硬盘 IO 性能,使系统卡顿更加严重。
2. 把“被压缩”部分展开到 10.11GB ,并且写到交换文件里。这样就腾出了 3.37 GB 可供使用。这会使得系统发生缺页中断时,换页的效率更低,因为从 SSD 中读写数据比在内存中压缩 /解压缩要慢。
对于第 2 点,若腾出的内存空间不足以减少换页的频率,同样会使得系统卡顿更加严重。
有两种情况:
1. 如果程序要访问的内存在很长一段时间里都比较固定,并且大小只有 4GB 左右,这么做就有正面的影响。
2. 如果各种程序都频繁访问交换中的任意内存数据,那么保持现状才能获得较好的性能。
macOS 提供了一个指标来更好地衡量目前的换页情况,即“内存压力”。当系统的内存不足并且又频繁发生缺页中断时,“内存压力”的数值就会上升。在截图里,“内存压力”的数值已经超过了一半以上,说明目前各种程序都在频繁地访问交换中不同区域的内存数据。因此对应情况 2 。
由于内存过小,已经影响了系统性能。
根据这张图,也可以估算出多大的内存才能完全不影响系统性能。
目前物理内存中没有被压缩的数据占据了 1.54 + 1.57 + 0.93 = 4.04 GB
压缩的部分要计算解压缩后的大小,即 3.37 × 3 = 10.11 GB
硬盘中有 1.48GB 的交换文件
所以实际内存需求一共有 4.04 + 10.11 + 1.48 = 15.63 GB
只要 16 GB 的内存就可以满足当前的使用场景,而不会感受到因内存导致的性能问题。当然,无法解决因为软件 bug 导致的卡顿。