我怎样才能找出我的 linux 机器的物理内存(RAM)总量是否适合用 shell 脚本来解析?

我正在输入一个 shell 脚本来找出一些 RHEL Linux 框中的物理内存总量。

首先,我想强调的是,我感兴趣的是内核识别的 全部物理内存,而不仅仅是 可用内存。因此,请避免使用建议阅读 /proc/meminfo或使用 自由头儿Sar命令的答案——在所有这些情况下,它们的“ 完整的记忆”值意味着“ 可用内存”。

第一个想法是读取引导内核消息:

Memory: 61861540k/63438844k available (2577k kernel code, 1042516k reserved, 1305k data, 212k init)

但是在一些 Linux 系统中,由于在内核启动时使用了 EMC2的 PowerPath 软件和它的 洪水引导消息,这些有用的引导内核消息不可用,甚至在 /var/log/dmesg文件中也不可用。

第二个选项是 中密码命令(由于一些较老的内核和体系结构的局限性,内核识别的 RAM 和真实的 RAM 可能不匹配,我对此提出了警告)。选项 记忆简化了脚本,但是我意识到该命令的旧版本没有 记忆选项。

我最后的机会是 开会命令。它报告内存页面大小,但不报告物理页面的总数—— 翻译: 奇芳系统变量似乎是可用的物理页面,而不是物理页面的总数。

# getconf -a | grep PAGES
PAGESIZE                           4096
_AVPHYS_PAGES                      1049978
_PHYS_PAGES                        15466409

我的问题是: 有没有其他方法可以获得物理内存的总量,适合用 shell 脚本进行解析?

270689 次浏览

你试过 cat /proc/meminfo吗? 然后你可以 Grep出你想要的,例如 共计

awk '/MemTotal/ {print $2}' /proc/meminfo

或者

cat /proc/meminfo | grep MemTotal

如果您对物理 RAM 感兴趣,请使用命令 dmidecode。它给了你一个 很多更多的信息,但是根据你的用例,你可能还想知道系统中的8G 是来自2x4GB 还是4x2GB。

我发现 htop是一个有用的工具。

Sudo apt-get install htop

然后

自由

会提供你需要的信息。

添加 /proc/meminfo的最后两个条目,它们会给你主机上存在的确切内存。

例如:

DirectMap4k:       10240 kB
DirectMap2M:     4184064 kB

10240 + 4184064 = 4194304 kB = 4096 MB.

cat /proc/meminfo | grep MemTotal或空闲内存可以提供服务器所拥有的准确内存数量。这不是“可用内存”。

我想,当您拥有一个 VM 并且希望计算管理程序承载的全部内存量时,您的问题就会出现,但是在这种情况下,您必须登录到管理程序。

cat /proc/meminfo | grep MemTotal

相当于

 getconf -a | grep PAGES | awk 'BEGIN {total = 1} {if (NR == 1 || NR == 3) total *=$NF} END {print total / 1024" kB"}'

还有一个有用的命令:
vmstat -s | grep memory
我机器上的样品输出是:

  2050060 K total memory
1092992 K used memory
743072 K active memory
177084 K inactive memory
957068 K free memory
385388 K buffer memory

另一个获取内存信息的有用命令是:
free
样本输出为:

             total       used       free     shared    buffers     cached
Mem:       2050060    1093324     956736        108     385392     386812
-/+ buffers/cache:     321120    1728940
Swap:      2095100       2732    2092368

这里的一个观察结果是,命令 free也提供有关交换空间的信息。
以下连结可能对你有用:
Http://www.linuxnix.com/find-ram-details-in-linuxunix/

free -h | awk '/Mem\:/ { print $2 }'

这将为您的系统提供可读格式的总内存,并自动扩展到适当的单位(例如字节、 KB、 MB 或 GB)。

dmidecode -t 17 | grep  Size:

添加上述所有显示在“大小:”之后的值将给出服务器中所有 RAM 棒的确切总物理大小。

这些方法是:

1./proc/meminfo

MemTotal: 8152200 kB


MemFree: 760808 kB

您可以编写代码或脚本来解析它。

2. 使用下面的宏来使用 sysconf

Sysconf (_ SC _ PHYS _ PAGES) * sysconf (_ SC _ PAGESIZE) ;

3. 使用 sysinfo 系统调用

Int sysinfo (struct sysinfo * info) ;

Struct sysinfo { .

   .


unsigned long totalram;  /*Total memory size to use */


unsigned long freeram;   /* Available memory size*/


.


.


};

Mb中的总内存:

x=$(awk '/MemTotal/ {print $2}' /proc/meminfo)
echo $((x/1024))

或:

x=$(awk '/MemTotal/ {print $2}' /proc/meminfo) ; echo $((x/1024))

总在线内存

使用 sys-fs 计算总联机内存。

totalmem=0;
for mem in /sys/devices/system/memory/memory*; do
[[ "$(cat ${mem}/online)" == "1" ]] \
&& totalmem=$((totalmem+$((0x$(cat /sys/devices/system/memory/block_size_bytes)))));
done


#one-line code
totalmem=0; for mem in /sys/devices/system/memory/memory*; do [[ "$(cat ${mem}/online)" == "1" ]] && totalmem=$((totalmem+$((0x$(cat /sys/devices/system/memory/block_size_bytes))))); done


echo ${totalmem} bytes
echo $((totalmem/1024**3)) GB

4GB 系统的输出示例:

4294967296 bytes
4 GB

解释

/sys/device/system/memory/block _ size _ byte

内存块中的字节数(十六进制值)。在值前面使用0x 可以确保在计算期间正确处理它。

/sys/device/system/memory/memory *

迭代所有可用的内存块,以验证它们是否在线,如果在线,则将计算的块大小添加到 total。

[[“ $(cat ${ mem }/online)”= = “1”]] & &

如果您更喜欢其他内存状态,则可以更改或删除此状态。

在 Linux 内核中,当前页面是内核可以看到的 RAM 的物理页面。从字面上看,当前页面是以4KB 为单位的 RAM 总大小。

grep present /proc/zoneinfo | awk '{sum+=$2}END{print sum*4,"KB"}'

“ MemTotal”表单/proc/meminfo 是好友系统管理的内存总大小。我们也可以这样计算:

grep managed /proc/zoneinfo | awk '{sum+=$2}END{print sum*4,"KB"}'

我知道这个问题很久以前就有人问过了,但我想提供另一种方法来解决这个问题,我发现这种方法对我刚刚研究的一个问题很有用:

lshw -c memory

Ishw

Lshw 是一个小工具,用于提取有关机器硬件配置的详细信息。它可以在支持 DMI 的 x86或 IA-64系统和一些 PowerPC 机器上报告精确的内存配置、固件版本、主板配置、 CPU 版本和速度、缓存配置、总线速度等。