我们有一台32G的Linux机器。我们按如下方式捕获内存:
mem=` cat /proc/meminfo | grep MemTotal | awk '{print $2}' `
echo $mem
32767184
现在我们将其转换为 GIGA:
mem_in_giga=` echo $(( $mem / 1024 / 1024)) `
echo $mem_in_giga
31
但从结果中我们得到的是 31,而不是 32G。
与命令相同的故事free
:
free -g
total used free shared buff/cache available
Mem: 31 9 17 0 4 20
Swap: 7 0 7
那么我们如何从任何命令中获取“32G”呢?
答案1
MemTotal
节目
可用 RAM 总量(即物理 RAM 减去一些保留位和内核二进制代码)。
您不能使用它来确定确切的安装内存,除非使用启发式方法......
要确定实际安装的内存,您应该使用lshw
或dmidecode
来显示已安装模块的大小;例如从lshw
:
*-memory
description: System Memory
physical id: 4c
slot: System board or motherboard
size: 32GiB
capabilities: ecc
configuration: errordetection=ecc
或者更紧凑的形式 ( 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)