我怎样才能找到适合shell脚本解析的linux盒子的总物理内存(RAM)?

 试管婴儿 发布于 2023-02-13 11:42

我正在键入一个shell脚本来查找某些RHEL linux框中的总物理内存.

首先,我想强调一下,我对内核识别的总物理内存感兴趣,而不仅仅是可用内存.因此,请避免建议读取/ proc/meminfo或使用free,topsar命令的答案- 在所有这些情况下,它们的" 总内存 "值表示" 可用内存 " 值.

首先想到的是读取引导内核消息:

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脚本解析?

7 个回答
  • 如果您对物理RAM感兴趣,请使用该命令dmidecode.它给你一个很大的不仅仅是更多的信息,但根据您的使用情况下,你可能也想知道,如果8G系统来自2x4GB棒或4x2GB棒.

    2023-02-13 11:44 回答
  • dmidecode -t 17 | grep  Size:
    

    添加"Size:"之后显示的所有上述值将给出服务器中所有RAM棒的精确总物理大小.

    2023-02-13 11:44 回答
  • 一个更有用的命令:
    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/

    2023-02-13 11:44 回答
  • free -h | awk '/Mem\:/ { print $2 }' 
    

    这将以人类可读的格式为您提供系统中的总内存,并自动扩展到适当的单位(例如,字节,KB,MB或GB).

    2023-02-13 11:44 回答
  • 你试过cat /proc/meminfo吗?然后你可以把你想要的东西,例如MemTotal

    更新示例(顺便说一句,谢谢,Masta):

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

    2023-02-13 11:45 回答
  • 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"}'
    

    2023-02-13 11:45 回答
  • 添加最后两个条目/proc/meminfo,它们会为您提供主机上存在的确切内存.

    例:

    DirectMap4k:       10240 kB
    DirectMap2M:     4184064 kB
    

    10240 + 4184064 = 4194304 kB = 4096 MB.

    2023-02-13 11:45 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有