如何找到合适的内存大小?

yae*_*ael 1 linux memory meminfo

我们有一台 32G 的 Linux 机器。我们按如下方式捕获内存:

mem=` cat /proc/meminfo | grep MemTotal | awk '{print $2}' `
echo $mem
32767184
Run Code Online (Sandbox Code Playgroud)

现在我们将其转换为 GIGA:

mem_in_giga=`  echo $(( $mem / 1024 / 1024)) `
echo $mem_in_giga
31
Run Code Online (Sandbox Code Playgroud)

但从结果中我们得到 31 而不是 32G。

free命令相同的故事:

free -g
              total        used        free      shared  buff/cache   available
Mem:             31           9          17           0           4          20
Swap:             7           0           7
Run Code Online (Sandbox Code Playgroud)

那么我们如何从任何命令中获得“32G”呢?

Ste*_*itt 7

MemTotal 显示

总可用 RAM(即物理 RAM 减去一些保留位和内核二进制代码)。

您不能使用它来确定确切安装的内存,除非使用启发式...

要确定实际安装的内存,您应该使用lshwor dmidecodewhich will show the size of the installed modules; 例如来自lshw

 *-memory
      description: System Memory
      physical id: 4c
      slot: System board or motherboard
      size: 32GiB
      capabilities: ecc
      configuration: errordetection=ecc
Run Code Online (Sandbox Code Playgroud)

或更紧凑的形式 ( lshw -class memory -short):

H/W path           Device      Class          Description
=========================================================
/0/0                           memory         64KiB BIOS
/0/47/48                       memory         256KiB L1 cache
/0/47/49                       memory         1MiB L2 cache
/0/47/4a                       memory         8MiB L3 cache
/0/4c                          memory         32GiB System Memory
/0/4c/0                        memory         8GiB DIMM DDR3 Synchronous 1600 MHz (0.6 ns)
/0/4c/1                        memory         8GiB DIMM DDR3 Synchronous 1600 MHz (0.6 ns)
/0/4c/2                        memory         8GiB DIMM DDR3 Synchronous 1600 MHz (0.6 ns)
/0/4c/3                        memory         8GiB DIMM DDR3 Synchronous 1600 MHz (0.6 ns)
Run Code Online (Sandbox Code Playgroud)