为什么启动后可用物理内存似乎增加了?

为什么启动后可用物理内存似乎增加了?

考虑以下:

$ dmesg  | grep 'Memory:'                                                                                                                                              
[    0.000000] Memory: 8009456K/8272776K available (8474K kernel code, 1293K rwdata, 3984K rodata, 1488K init, 1316K bss, 263320K reserved, 0K cma-reserved)

实际上,这表明在启动时系统有 8009456K 可用于任务(减去保留的内容)。然而,启动后free报告vmstat了一些非常奇怪的事情

$ free -k ; vmstat -s | head -n 1                                                                                                                                      
              total        used        free      shared  buff/cache   available
Mem:        8059880     2774996     2667600      394196     2617284     4529964
Swap:       1048572         412     1048160
      8059880 K total memory

奇怪的是,已经启动的系统更多的可用内存,这在逻辑上似乎与人们的预期相反 - 在启动时应该运行更少的进程,因此应该有更多的可用内存。这怎么解释呢?

答案1

在启动过程中,以及在您提取的 dmseg 行之后的阶段,通常会释放一些内存。让我们通过我的电脑来看一下示例:

首先,我们稍微改变一下 dmesg 提取命令(已编辑):

$ dmesg  | grep -i 'Memory:'
 ...[snip]...
[    0.000000] Memory: 15829128K/16472972K available (8480K kernel code, 1294K rwdata, 3984K rodata, 1492K init, 1316K bss, 643844K reserved, 0K cma-reserved)
[    0.009844] Freeing SMP alternatives memory: 32K
[    0.868465] Freeing initrd memory: 37044K
[    2.621648] Freeing unused kernel memory: 1492K
[    2.624095] Freeing unused kernel memory: 1748K
[    2.625334] Freeing unused kernel memory: 112K

注意上面摘要行后面的释放内存。将它们全部加起来,我得到总共应该有 15869556 个。现在让我们使用相同的命令检查一下:

$ free -k ; vmstat -s | head -n 1
              total        used        free      shared  buff/cache   available
Mem:       15869556      113352    15461820        9792      294384    15454760
Swap:      16472060           0    16472060
     15869556 K total memory

请注意,预期总数恰好等于实际总数。

相关内容