我怎样才能find适合shell脚本parsing的我的linux盒子的总物理内存(RAM)?
我正在input一个shell脚本来查找一些RHEL linux盒子中的总物理内存。
首先,我想强调的是,我对由内核识别的全部物理内存感兴趣,而不仅仅是可用的内存 。 因此,请避免提示读取/ proc / meminfo或使用free , top或sar命令的答案 – 在所有这些情况下,它们的“ 总内存 ”值意味着“ 可用内存 ”。
第一个想法是读取引导内核消息:
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?
如果您对物理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的确切数量。 这不是“可用内存”。
我想你的问题出现在你有一个虚拟机时,你想计算虚拟机pipe理程序托pipe的全部内存量,但是在这种情况下你必须login到虚拟机pipe理程序。
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
你可以写一个代码或脚本来parsing它。
2.使用sysconf通过使用下面的macros
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*/ . . };
我发现htop
是一个有用的工具。
sudo apt-get install htop
接着
免费-m
会给你所需要的信息。