1
ohiu 2023-03-25 16:15:19 +08:00
|
2
icestraw OP @ohiu 我知道压力变黄表示内存不够用了,我只是不明白为什么在压力变小的情况下为什么颜色反而变黄,这似乎说明“百分比”和“颜色”不是同一种算法,我想了解背后算法的区别。
|
3
ohiu 2023-03-25 17:02:32 +08:00
@icestraw 如果百分比就代表颜色的话,那要颜色做什么😂,没有人知道具体的算法,根据官网的描述,graph 只是让你看看是否短时间内有 spike ,表示有内存泄漏发生
|
4
lscho 2023-03-25 17:27:46 +08:00 via iPhone
百分比是指当前占用的内存,分为活跃内存(短期内使用的)和不活跃内存(长时间没有使用)。
如果百分比很高表示占用内存高,就会去使用不活跃的内存空间(即把之前长时间没有使用的内存重新分配) 如果不活跃空间也不多了,就是黄色或者红色 |
5
lscho 2023-03-25 17:34:49 +08:00
macOS 之前的版本是可以看到活跃内存和不活跃内存的占用情况,不清楚从哪个版本取消了,现在提供了更详细的显示,在活动监视器的顶部 菜单-显示-列 中可以筛选
|
6
zhaoxin 2023-03-25 17:59:40 +08:00
@icestraw 很遗憾,具体算法苹果并没有公开,因此你无法知晓其中的区别。你只能通过自己的实验来尝试了解它。比如你可以看看你前后运行的应用是否有什么大的变化。目前唯一知道的就是这个算法是根据内核与内存相关的 1000 多个参数综合得出的。
说说我的猜测。内存压力是否变黄和交换区的速度有关。可能你当时执行了磁盘操作,比如复制粘贴文件或者安装新软件等。导致交换区速度变慢,这个实时速度的降低,导致了颜色变黄。 |
7
icestraw OP @lscho 大概理解一下,应该是时间的区别?
对于内存压力,大概是反应短期内存的使用情况,比如突然载入了特别大的图像,这会儿可能就会出现内存压力飙升的情况,但是此时显示估计还是绿色的,伴随着的是 swap 的疯狂使用。但是如果这张图片很长一段时间一直在被编辑,并没有释放的话,内存压力此时才会变颜色 对于颜色的话,苹果大概是自己有一套算法,判定哪些是非活跃内存,因此如果这个算法判定系统很长一段时间都没什么非活跃内存可用(全都是活跃的)那就把内存压力标黄或者标红。这需要一定时间周期去判断。同时解除这个判断可能也需要一定时间,因为需要预判用户的使用情况。 但是我怎么感觉,结合 macOS“尽可能使用多的空闲内存”的惯例,苹果把“内存够不够用”从直观数据变成了黑盒逻辑... |
8
icestraw OP @zhaoxin 我的直观感觉是,如果一个时间段内,虽然我的内存占用是满的,但是我没有频繁操作电脑,这时候虽然开了很多浏览器 tab/窗口,swap 占用了很多 G ,但是此时压力不会上升太多。
但是如果这时候突然执行了一个内存敏感且需要大量 IO 的操作,比如图片编辑 /代码编译,此时压力表就会突然变黄,哪怕总的内存没有上涨太多,也会陡然变卡。 如果我执行上面内存敏感操作的时候,内存占用本身没有太多,这时候无论是压力还是颜色,都不会变化太多。 感觉这么做同配置下性能可能有提升,但是有点剥夺了原来“内存占用百分比”的功能。毕竟我用 windows 的时候,如果内存太满,我就不会再往上加负载。而苹果通过 模糊内存占用 并且 强调内存压力 的做法,会让我对 是否可以在当前电脑上继续加负载 有错误的判断。 |
9
zhaoxin 2023-03-25 18:28:39 +08:00
@icestraw 我倒是觉得苹果的这个设计更好一些。像你说的那样,如果压力只是一个百分比就能得出结论的东西,固然是容易理解。但是并不能真实反映系统的当前状态。苹果的这个相当于是实时的压力,需要综合考虑系统当前的状态。就如同我举例的那样,因为 SSD 的速度影响交换分区,所以 SSD 存在其他操作时,交换分区的速度就会下降,从而导致内存压力变黄,这个从量的角度上,其实是不变的。并没有内存需求的增加,但是因为交换分区变慢了,导致了内存整体性能的下降,从而变黄,这个不是更能真实反映系统的当前状态吗?
另外,苹果有关与内存压力的说法,并不是不允许变黄,而是说如果长期变黄,那就需要增加内存。换句话说,这种实时的变化你不必过于关注,而应该关注的是长期的趋势,是否经常变黄,变黄后是否还能变回来。这个才是需要关注的。 |
10
wyd011011daniel 2023-03-25 20:31:40 +08:00
可以看看 luvletter 的这期视频
|
11
littlewing 2023-03-25 21:31:37 +08:00
是不是一个表示实时的占用,另一个表示 Load Averages
|
12
icestraw OP @wyd011011daniel 之前看过,他举出的那个例子同样极端,8G 的内存,10G+的 swap ,然后内存压力只有 50%不到,还是绿色的,我几乎就没遇到过这样的 ram 组合。我 32G 的设备,没吃到 10G 的 swap ,压力表都会有黄的时候。16G 的设备无论 swap 多少,哪怕是 0 ,只要使用强度上来了,一样内存压力变黄。只能说他使用强度并不大,可能平时的操作都是“大文件读写”,而不是“多任务频繁的 Context 切换”这种真正需要大内存的场景。瞬间大文件读写 /kernel bug 会吃 swap ,但是对内存不会频繁操作,在 macOS 中应该不会被判定为内存压力大。
我对苹果的内存指示感觉太模糊,是因为我使用过程中,会觉得这个指标体验会有断层。一旦压力表变黄,系统响应就突然会慢上一个档次,而“究竟开多少程序,才会导致内存压力变大”·这个度量是模糊的,因为 macOS 并没有显示“每个程序给系统造成压力大小”的任务管理器。从我的使用体验来讲,我认为知乎那些人说的并没有错,但是那个博主,我觉得他对原理科普是很耐心,但是有点故意找话题的感觉。我相信他应该对自己平时内存够不够用,心里会有另一杆秤。 |
13
lslqtz 2023-03-25 23:20:12 +08:00
首先可以考虑可能这一部分有个分界点在, 到达一定界限加余量后才会进行转换, 不会在边界点频繁转换.
其次这个内存压力可能考虑的维度比较多, 比如缓存内存释放的代价大小等等. |
14
lslqtz 2023-03-25 23:20:59 +08:00
另外我比较好奇你在跑什么样的程序, 因为我机器的内存压力是在 70-80% 才黄的.
|
15
icestraw OP @lslqtz 和我跑的程序似乎关系没那么大,也就音乐,记事本,编辑器,IDE ,浏览器啥的,tab 也就 10 个左右。但是似乎和我切换的频率有关系,用着用着压力就大了。感觉就像苹果一开始觉得部分内存存在 swap 里是没问题的,用着用着发现原来这些内存都会被频繁切换,就把压力标黄了。一旦变黄(可能还没黄),整个系统就开始变卡。打开图片啊图纸就会变慢。
因此我一般用 macOS 的时候并不习惯看内存压力,反而比较习惯看“已压缩”的内存。如果这个值开始增长,系统响应就会变慢。和我的理解也比较相符:系统资源有相当一部分被拿来压缩内存了。哪怕它是硬件加速的,因为压缩 /解压缩需要时间,写入速度肯定远不如内存本身,也会导致系统整体响应变慢。归根结底内存压缩只是对使用不频繁场景下的压力缓解方式,对真正需要及时响应,又需要那么多内存的场景 也无法超越物理限制。 |
16
haroldji 2023-03-26 07:55:50 +08:00
有个自带命令行工具:memory_pressure ,里面有更详细的数据呈现;其中最后一行 System-wide memory free percentage 应该就是内存压力的量化,亲测小于 50% 才会变黄
|