我正在键入一个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简化了脚本,但我意识到该命令的旧版本没有--memory选项.
我的最后一次机会是getconf命令.它报告内存页面大小,但不报告物理页面的总数 - _PHYS_PAGES系统变量似乎是可用的物理页面,而不是总物理页面.
# getconf -a | grep PAGES PAGESIZE 4096 _AVPHYS_PAGES 1049978 _PHYS_PAGES 15466409
我的问题:是否有其他方法可以获得物理内存的总量,适合由shell脚本解析?
如果您对物理RAM感兴趣,请使用该命令dmidecode
.它给你一个很大的不仅仅是更多的信息,但根据您的使用情况下,你可能也想知道,如果8G系统来自2x4GB棒或4x2GB棒.
dmidecode -t 17 | grep Size:
添加"Size:"之后显示的所有上述值将给出服务器中所有RAM棒的精确总物理大小.
一个更有用的命令:
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).
你试过cat /proc/meminfo
吗?然后你可以把你想要的东西,例如MemTotal
更新示例(顺便说一句,谢谢,Masta):
awk '/MemTotal/ {print $2}' /proc/meminfo
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 = 4096 MB.