如何find适合shell脚本parsing的linux盒子的总物理内存(RAM)?

我正在input一个shell脚本来查找一些RHEL linux盒子中的总物理内存。

首先,我想强调的是,我对由内核识别的全部物理内存感兴趣,而不仅仅是可用的内存 。 因此,请避免提示读取/ proc / meminfo或使用freetopsar命令的答案 – 在所有这些情况下,它们的“ 总内存 ”值意味着“ 可用内存 ”。

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

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

但是在某些Linux机器中,由于在内核启动时使用了EMC2的PowerPath软件及其泛洪引导消息,因此该引导内核消息不可用,即使在/ var / log / dmesg文件中也是如此。

第二个选项是dmidecode命令(由于一些旧的内核和架构的限制,我被警告了内核识别的RAM和真实的RAM可能不匹配)。 选项 – 内存简化了脚本,但是我意识到这个命令的旧版本没有–memory选项。

我最后的机会是getconf命令。 它报告内存页面大小,但不是物理页面总数 – _PHYS_PAGES系统variables似乎是可用的物理页面,而不是整个物理页面。

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

我的问题:是否有另一种方法来获得物理内存总量,适合由shell脚本parsing?

Solutions Collecting From Web of "如何find适合shell脚本parsing的linux盒子的总物理内存(RAM)?"

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

你有没有试过cat /proc/meminfo ? 然后,你可以grep你想要什么, MemTotal eg

更新示例(btw。谢谢,Masta):

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

cat /proc/meminfo | grep MemTotal cat /proc/meminfo | grep MemTotal或免费提供你的服务器的RAM的确切数量。 这不是“可用内存”。

我想你的问题出现在你有一个虚拟机,并且你想计算虚拟机管理程序托管的全部内存量,但是在这种情况下你将不得不登录到虚拟机管理程序。

 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"}' 

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

例:

 DirectMap4k: 10240 kB DirectMap2M: 4184064 kB 

10240 + 4184064 = 4194304 kB = 4096MB。

一个更有用的命令:
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命令也free了有关交换空间的信息。
以下链接可能对您有用:
http://www.linuxnix.com/find-ram-details-in-linuxunix/

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

这将以您可读的格式向您提供系统中的总内存,并自动缩放到适当的单位(例如字节,KB,MB或GB)。

 dmidecode -t 17 | grep Size: 

在“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);

结构sysinfo {。

  . unsigned long totalram; /*Total memory size to use */ unsigned long freeram; /* Available memory size*/ . . }; 

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

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

sudo apt-get install htop

接着

免费-m

会给你所需要的信息。