我正在键入一个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 文件。
第二个选项是 dmidecode 命令(由于某些旧内核和架构的限制,我警告内核识别的RAM和实际RAM可能不匹配)。选项 - memory 简化了脚本,但我意识到该命令的旧版本没有 - memory 选项。
我的最后一次机会是 getconf 命令。它报告内存页面大小,但不报告物理页面总数 - _PHYS_PAGES 系统变量似乎是可用的物理页面,而不是总物理页面。
# getconf -a | grep PAGES PAGESIZE 4096 _AVPHYS_PAGES 1049978 _PHYS_PAGES 15466409
我的问题:是否有另一种获取物理内存总量的方法,适合由shell脚本解析?
答案 0 :(得分:114)
你试过cat /proc/meminfo
吗?然后你可以把你想要的东西, MemTotal 例如
更新示例(顺便说一句,谢谢,Masta):
awk '/MemTotal/ {print $2}' /proc/meminfo
答案 1 :(得分:48)
如果您对物理RAM感兴趣,请使用命令dmidecode
。它为您提供了 lot 更多信息,但根据您的使用情况,您可能还想知道系统中的8G是来自2x4GB棒还是4x2GB棒。
答案 2 :(得分:48)
$string='bla bla xxx bla *xxx bla bla **xxx bla bla ***xxx bla bla ****xxx';
$search='xxx';
$preceding_character='*';
$array_of_strings = explode($search, $string);
foreach ($array_of_strings as $key => $value) {
if($value == end($array_of_strings)) break;
$count_preceding_character = substr_count($value, $preceding_character);
if($count_preceding_character % 2 == 0) {
$array_of_strings[$key] = $value.$preceding_character;
}
}
$final_string = implode($search, $array_of_strings);
echo $final_string;
或免费为您提供服务器具有的确切RAM量。这不是"可用内存"。
我猜你的问题出现了,当你有一台虚拟机而你想计算虚拟机管理程序托管的全部内存量时,你必须在这种情况下登录虚拟机管理程序。
cat /proc/meminfo | grep MemTotal
相当于
cat /proc/meminfo | grep MemTotal
答案 3 :(得分:15)
添加/proc/meminfo
的最后两个条目,它们会为您提供主机上的确切内存。
示例:
DirectMap4k: 10240 kB
DirectMap2M: 4184064 kB
10240 + 4184064 = 4194304 kB = 4096 MB。
答案 4 :(得分:14)
一个更有用的命令:
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/
答案 5 :(得分:11)
free -h | awk '/Mem\:/ { print $2 }'
这将以人类可读的格式为您提供系统中的总内存,并自动缩放到适当的单位(例如字节,KB,MB或GB)。
答案 6 :(得分:6)
dmidecode -t 17 | grep Size:
添加“尺寸:”之后显示的所有上述值将给出服务器中所有RAM棒的精确总物理尺寸。
答案 7 :(得分:2)
Mb
中的总内存:
x=$(awk '/MemTotal/ {print $2}' /proc/meminfo)
echo $((x/1024))
或:
x=$(awk '/MemTotal/ {print $2}' /proc/meminfo) ; echo $((x/1024))
答案 8 :(得分:1)
以下是:
<强> 1。的/ proc / meminfo中强>
MemTotal: 8152200 kB
MemFree: 760808 kB
您可以编写代码或脚本来解析它。
<强> 2。使用下面的宏
使用sysconfsysconf(_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*/
.
.
};
答案 9 :(得分:0)
在线总内存
使用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
4 GB系统的示例输出:
4294967296 bytes
4 GB
说明
/ sys / devices / system / memory / block_size_bytes
内存块中的字节数(十六进制值)。在值前面使用0x可以确保在计算过程中正确处理了该值。
/ sys / devices / system /内存/内存*
遍历所有可用的内存块以验证它们是否处于联机状态,如果存在,则将计算出的块大小添加到totalmem中。
[[“ $(cat $ {mem} / online)” ==“ 1”]] &&
如果您喜欢其他内存状态,则可以更改或删除它。
答案 10 :(得分:0)
在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"}'
答案 11 :(得分:0)
我知道这个问题是很久以前提出的,但是我想提供另一种方法来解决这个问题,我发现它对我刚解决的问题很有用:
lshw -c memory
lshw是提取有关机器硬件配置的详细信息的小工具。它可以报告具有DMI功能的x86或IA-64系统以及某些PowerPC机器上确切的内存配置,固件版本,主板配置,CPU版本和速度,缓存配置,总线速度等(已知PowerMac G4可以工作)。
答案 12 :(得分:-7)
我发现htop
是一个有用的工具。
sudo apt-get install htop
然后
free -m
将提供您需要的信息。