如何计算“活动监视器”中“内存压力”图的Y值?


41

vm.memory_pressure在OS X 10.10.2-Yosemite上如何限制/计算值?

我已经研究了这个问题的几个答案,并且正在命令行中尝试一些操作以获取确切的值,而不是查看活动监视器中的图表。

系统在轻负载下:

~ ❯❯❯ sysctl -a vm | grep page_free && sysctl vm.memory_pressure && sysctl kern.memorystatus_vm_pressure_level
vm.vm_page_free_target: 4000
vm.page_free_wanted: 0
vm.page_free_count: 2683717
vm.memory_pressure: 0
kern.memorystatus_vm_pressure_level: 1

kern.memorystatus_vm_pressure_level看起来正确,并且似乎是它用来为图形着色的颜色(绿色表示1-NORMAL,黄色表示2-WARN,红色表示4-CRITICAL)。但是,vm.memory_pressure为0,并且图形上带有一些绿色,并且呈锯齿状,这意味着该值显然会随着时间而变化,而不仅仅是位于0。

在重负载下看起来像这样:

❯❯❯ sysctl -a vm | grep page_free && sysctl vm.memory_pressure && sysctl kern.memorystatus_vm_pressure_level
vm.vm_page_free_target: 4000
vm.page_free_wanted: 0
vm.page_free_count: 32572
vm.memory_pressure: 1693
kern.memorystatus_vm_pressure_level: 4

或这个...

~ ❯❯❯ sysctl -a vm | grep page_free && sysctl vm.memory_pressure && sysctl kern.memorystatus_vm_pressure_level
vm.vm_page_free_target: 4000
vm.page_free_wanted: 0
vm.page_free_count: 5431
vm.memory_pressure: 277
kern.memorystatus_vm_pressure_level: 4

或这个...

~ ❯❯❯ sysctl -a vm | grep page_free && sysctl vm.memory_pressure && sysctl kern.memorystatus_vm_pressure_level
vm.vm_page_free_target: 4000
vm.page_free_wanted: 3220
vm.page_free_count: 805
vm.memory_pressure: 1
kern.memorystatus_vm_pressure_level: 4

这就是我感到困惑的地方。由于几个原因,仅这些值都不可能是图形的Y值。

首先,在正常负载下,vm.memory_pressure几乎一直都处于0,而该图并不处于0。

第二,它们彼此不一致。从memory_pressure值来看,它实际具有需要的页面(3220个需要的压力,压力仅为1)时要比具有5431个空闲且没有需要的压力(压力为277)时要低。而且以某种方式,它的压力甚至比具有32572自由(并具有1693压力)时的压力还要低。

因此,当它绘制该图时,Y值的计算是什么,如何从命令行获取计算所需的数据?我正在寻找一个命令行工具,该工具将吐出当前行在该图形上的高度的百分比,因此我需要知道如何在任何给定时间计算该值以及其范围可能的值是。


7
好问题。活动监视器以0%到100%的比例显示压力,但是我在命令行注释中找不到任何参考。我将看看本周是否可以为答案做足够的挖掘。我们可以假定您仅对10.10.x感兴趣吗?
bmike

3
谢谢。是的,我使用的是10.10.2,所以这是我唯一关心的一个。
Raugturi 2015年

5
引人入胜的数据点。我仍然不清楚该算法的设计或编码方式-甚至各个版本之间都保持不变。请参阅apple.stackexchange.com/questions/107126/…,以获得一些不错的评论和更多数据。
bmike

Answers:


2

目前这只是部分答案。直到删除这句话,这个答案才能完成。

从表面上看,当使用OP概述的命令将内存压力图与终端报告的内容进行比较时,从表面上看,内存压力图不太有意义:

sysctl -a vm | grep page_free && sysctl vm.memory_pressure && sysctl kern.memorystatus_vm_pressure_level

但是,这里的问题在于该命令限制了它要报告的vm值。实际上,实际上总共有105个值,但是此命令仅报告以下五个值:

vm.vm_page_free_target:
vm.page_free_wanted:
vm.page_free_count:
vm.memory_pressure:
kern.memorystatus_vm_pressure_level:

注意:数值通常会在冒号(:)之后出现,但是我没有将它们包括在内。

显然,绝大部分105 vm值都不是确定内存压力的实际计算的一部分,但是这里的问题是上述五个值并不是唯一用于计算内存压力的值

例如,虽然上面的输出提供了各种自由值中的一些,但它没有提供任何无效值,等等。

这些值很重要,因为内存压力算法会计算这些值之间的比率,并且这些值之间的关系从OP问题中的命令产生的输出中并不明显。

我可能有一些技术信息可以对此提供更多启示。我将在一周内以任何一种方式更新此答案。

[状态更新]

我一直找不到所需的技术信息。但是,我可以肯定我仍然拥有它-可能在某些旧的CDR / DVDR备份中。一旦找到答案,或者确定不会找到它,我将对其进行更新。

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.