'top' 中的故障列是什么?

What is the Faults column in 'top'?

我正在尝试下载 Xcode(到 El Capitan 版本),它似乎卡住了。当我 运行 'top' 时,我看到一个名为 'storedownloadd' 的进程,并且 "STATE" 列在休眠、卡住和 运行ning 之间交替。 'FAULTS' 有一个快速增加的数字,后面有一个加号。 'FAULTS' 列现在超过 400,000 并且还在增加。除了 'top',我没有看到 activity 下载的迹象。这是否表明有什么不对劲?这是一个屏幕截图:

Processes: 203 total, 2 running, 10 stuck, 191 sleeping, 795 threads                                                                                                                                                                                                11:48:14
Load Avg: 4.72, 3.24, 1.69  CPU usage: 56.54% user, 6.41% sys, 37.3% idle    SharedLibs: 139M resident, 19M data, 20M linkedit. MemRegions: 18620 total, 880M resident, 92M private, 255M shared. PhysMem: 7812M used (922M wired), 376M unused.
VM: 564G vsize, 528M framework vsize, 0(0) swapins, 512(0) swapouts. Networks: packets: 122536/172M in, 27316/2246K out. Disks: 78844/6532M read, 240500/6746M written.

PID  COMMAND          %CPU  TIME     #TH   #WQ  #PORT MEM    PURG   CMPRS  PGRP PPID STATE    BOOSTS          %CPU_ME   %CPU_OTHRS UID  FAULTS  COW    MSGSENT  MSGRECV  SYSBSD    SYSMACH
354  storedownloadd   0.3   00:47.58 16    5    200   255M   0B     0B     354  1    sleeping *3[1]           155.53838 0.00000    501  412506+ 54329  359852+  6620+    2400843+  1186426+
57   UserEventAgent   0.0   00:00.35 22    17   378   4524K+ 0B     0B     57   1    sleeping *0[1]           0.23093   0.00000    0    7359+   235    15403+   7655+    24224+    17770
384  Terminal         3.3   00:12.02 10    4    213   34M+   12K    0B     384  1    sleeping *0[42]          0.11292   0.04335    501  73189+  482    31076+   9091+    1138809+  72076+ 

top 报告故障时,它指的是 "page faults",更具体地说:

The number of major page faults that have occurred for a task. A page fault occurs when a process attempts to read from or write to a virtual page that is not currently present in its address space. A major page fault is when disk access is involved in making that page available.

如果应用程序试图访问当前不在物理 RAM 中的内存页面上的地址,则会发生页面错误。当这种情况发生时,虚拟内存系统调用一个特殊的页面错误处理程序来立即响应错误。页面错误处理程序停止代码执行,找到物理内存的空闲页面,从磁盘加载包含所需数据的页面,更新页面 table,最后 returns 控制程序 —然后可以正常访问内存地址。此过程称为分页。

根据尝试执行的代码和系统上的当前内存可用性,轻微页面错误可能很常见,但是,也需要注意不同的级别(次要、主要、无效),它们是在下面的链接中有更详细的描述。

Apple : About The Virtual Memory System

Wikipedia : Page Fault

whosebug.com : page-fault