为什么 Mac 上的进程加起来不等于总物理内存?

为什么 Mac 上的进程加起来不等于总物理内存?

运行ps -ax -O 'rss user %mem应该调用当前正在参与 Active 或 Wired 的所有进程,在 Mac 的定义中

“活动 + 有线 + 非活动 + 空闲 = 总物理内存”,对吗?

活动监视器显示出高积极的内存使用情况和手工计数显示数字较低,因此我使用下面的 awk 脚本重新计算。

注意活动监视器的屏幕截图1针对“活动”和“有线”。捕获时,“root”进程显示~377MiB,而非 root 进程总计~1805MiB 接近。

total: root  376632 KiB, and  active  1805476 KiB , percent :  51.9
% root  8.4
% active  43.5

截屏

但是,关闭 Chrome 会让问题变得更明显。我有一张活动监视器截图2,带有脚本输出。这里,积极的也不有线记忆匹配。

total: root  365968 KiB, and  active  643880 KiB , percent :  23.6
% root  8.2
% active  15.4

截屏

mem_count.sh:

 3 ps -axmc -O 'rss user %mem' | awk '
 4 
 5 BEGIN { 
 6     root = 0 ; active = 0 ; percent_root = 0.0 ;
 7     percent_active = 0.0  ; percent = 0.0 ; 
 8 } 
 9 
10 { 
11 percent += $4
12 if ( $3 == "root")  {  
13     root += $2 
14     percent_root  += $4 ; 
15 } 
16 else {  
17     active += $2  
18     percent_active  += $4 ; 
19 } 
20 
21 } 
22 END {
23     print "total: root ", root, "KiB, and  active ", active , "KiB , percent : ", percent  ; 
24     print "% root " , percent_root      
25     print "% active " , percent_active    
26 }'

示例输出

$ ps -axmc -O 'rss user %mem'
PID    RSS USER             %MEM   TT  STAT      TIME COMMAND
37 160964 root              3.8   ??  Ss    20:22.92 mds 
...

这让人有点头疼。图片参考:

答案1

ps 显示以下统计信息用户进程仅有的。它不报告有关内核的统计信息。因此,不要指望 ps 报告的内存会等于总物理内存。

你似乎还误解了类 Unix 操作系统和 OSX 内存管理的一些关键概念。我不知道具体是哪一种,但这里

  1. 根!=内核:root 也是一个用户。
  2. 有线内存 != 根进程使用的内存
  3. 活动内存 != 进程使用的内存
  4. 非活动记忆并不像人们想象的那样工作:它还包括正在运行的进程的内存。阅读这个问题这为非活动记忆提供了一些见解。

底线是,活动监视器的聚合内存统计数据与 ps 报告的内存使用情况统计数据之间没有任何简单的关联。

相关内容