Jda*_*ian 116 linux ram memory-size
我正在键入一个shell脚本来查找某些RHEL linux框中的总物理内存.
首先,我想强调一下,我对内核识别的总物理内存感兴趣,而不仅仅是可用内存.因此,请避免建议读取/ proc/meminfo或使用free,top或sar命令的答案- 在所有这些情况下,它们的" 总内存 "值表示" 可用内存 " 值.
首先想到的是读取引导内核消息:
Memory: 61861540k/63438844k available (2577k kernel code, 1042516k reserved, 1305k data, 212k init)
Run Code Online (Sandbox Code Playgroud)
但是在某些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脚本解析?
Rob*_*ert 121
你试过cat /proc/meminfo
吗?然后你可以把你想要的东西,例如MemTotal
更新示例(顺便说一句,谢谢,Masta):
awk '/MemTotal/ {print $2}' /proc/meminfo
Run Code Online (Sandbox Code Playgroud)
小智 53
如果您对物理RAM感兴趣,请使用该命令dmidecode
.它给你一个很大的不仅仅是更多的信息,但根据您的使用情况下,你可能也想知道,如果8G系统来自2x4GB棒或4x2GB棒.
小智 48
cat /proc/meminfo | grep MemTotal
或免费为您提供服务器具有的确切RAM量.这不是"可用内存".
我猜你的问题出现了,当你有一台虚拟机并想要计算虚拟机管理程序托管的全部内存量时,你必须在这种情况下登录虚拟机管理程序.
cat /proc/meminfo | grep MemTotal
Run Code Online (Sandbox Code Playgroud)
相当于
getconf -a | grep PAGES | awk 'BEGIN {total = 1} {if (NR == 1 || NR == 3) total *=$NF} END {print total / 1024" kB"}'
Run Code Online (Sandbox Code Playgroud)
Yog*_*war 17
一个更有用的命令:
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
Run Code Online (Sandbox Code Playgroud)
获取内存信息的另一个有用命令是:
free
示例输出是:
total used free shared buffers cached
Mem: 2050060 1093324 956736 108 385392 386812
-/+ buffers/cache: 321120 1728940
Swap: 2095100 2732 2092368
Run Code Online (Sandbox Code Playgroud)
这里有一个观察是,该命令还free
提供有关交换空间的信息.
以下链接可能对您有用:http:
//www.linuxnix.com/find-ram-details-in-linuxunix/
小智 15
添加最后两个条目/proc/meminfo
,它们会为您提供主机上存在的确切内存.
例:
DirectMap4k: 10240 kB
DirectMap2M: 4184064 kB
Run Code Online (Sandbox Code Playgroud)
10240 + 4184064 = 4194304 kB = 4096 MB.
小智 14
free -h | awk '/Mem\:/ { print $2 }'
Run Code Online (Sandbox Code Playgroud)
这将以人类可读的格式为您提供系统中的总内存,并自动扩展到适当的单位(例如,字节,KB,MB或GB).
小智 7
dmidecode -t 17 | grep Size:
Run Code Online (Sandbox Code Playgroud)
添加"Size:"之后显示的所有上述值将给出服务器中所有RAM棒的精确总物理大小.
总在线内存
使用 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
Run Code Online (Sandbox Code Playgroud)
4 GB 系统的输出示例:
4294967296 bytes
4 GB
Run Code Online (Sandbox Code Playgroud)
解释
/sys/devices/系统/内存/block_size_bytes
内存块中的字节数(十六进制值)。在值前面使用 0x 可确保在计算过程中正确处理该值。
/sys/设备/系统/内存/内存*
迭代所有可用内存块以验证它们是否在线,并将计算出的块大小添加到totalmem(如果在线)。
[[“$(cat ${mem}/online)”==“1”]]&&
如果您更喜欢其他内存状态,可以更改或删除它。
使用lsmem
:
lsmem -b --summary=only | sed -ne '/online/s/.* //p'
Run Code Online (Sandbox Code Playgroud)
返回物理在线内存(以字节为单位)。如果没有,-b
将返回人类可读的值。
lsmem
在 RPM 中提供util-linux
(已在 CentOS 7、UBI 7、UBI 8 和 UBI 9 上验证),它是 systemd 的直接或间接依赖项。您应该能够lsmem
在任何基于 systemd 的 RHEL 系统上找到该实用程序。
归档时间: |
|
查看次数: |
239711 次 |
最近记录: |