簡體   English   中英

如何找出適合由 shell 腳本解析的 linux 機器的總物理內存 (RAM)?

[英]How can I find out the total physical memory (RAM) of my linux box suitable to be parsed by a shell script?

我正在鍵入一個 shell 腳本來找出某些 RHEL linux 機器中的總物理內存。

首先我想強調的是,我對內核識別的總物理內存感興趣,而不僅僅是可用內存 因此,請避免建議閱讀/proc/meminfo或使用freetopsar命令的答案——在所有這些情況下,它們的“總內存”值意味着“可用內存”值。

第一個想法是閱讀引導內核消息:

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

你試過cat /proc/meminfo嗎? 然后,您可以使用awkgrep找出您想要的內容,例如MemTotal

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

cat /proc/meminfo | grep MemTotal

如果您對物理 RAM 感興趣,請使用命令dmidecode 它給你的不僅僅是一個更多信息,但根據您的使用情況下,你可能也想知道,如果8G系統來自2x4GB棒或4x2GB棒。

cat /proc/meminfo | grep MemTotal cat /proc/meminfo | grep MemTotal或 free 為您提供服務器擁有的確切 RAM 量。 這不是“可用內存”。

我想當您擁有 VM 並且您想計算虛擬機管理程序托管的全部內存量時,您的問題就會出現,但在這種情況下您必須登錄虛擬機管理程序。

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的最后 2 個條目,它們為您提供主機上存在的確切內存。

示例:

DirectMap4k:       10240 kB
DirectMap2M:     4184064 kB

10240 + 4184064 = 4194304 kB = 4096 MB。

另一個有用的命令:
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)。

dmidecode -t 17 | grep  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

4 GB 系統的示例輸出:

4294967296 bytes
4 GB

說明

/sys/devices/system/memory/block_size_bytes

內存塊中的字節數(十六進制值)。 在值前使用 0x 可確保在計算過程中正確處理。

/sys/devices/system/memory/memory*

迭代所有可用內存塊以驗證它們是否在線,如果它們在線,則將計算出的塊大小添加到 totalmem 中。

[["$(cat ${mem}/online)" == "1" ]] &&

如果您更喜歡另一種記憶狀態,您可以更改或刪除它。

Mb總內存:

x=$(awk '/MemTotal/ {print $2}' /proc/meminfo)
echo $((x/1024))

或:

x=$(awk '/MemTotal/ {print $2}' /proc/meminfo) ; echo $((x/1024))

在 Linux Kernel 中,當前頁是內核可以看到的 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"}'

這些是方法:

1. /proc/meminfo

MemTotal: 8152200 kB

MemFree: 760808 kB

您可以編寫代碼或腳本來解析它。

2. 使用以下宏來使用 sysconf

系統配置(_SC_PHYS_PAGES)* 系統配置(_SC_PAGESIZE);

3. 通過使用 sysinfo 系統調用

int sysinfo(struct sysinfo *info);

結構系統信息{。

   .

   unsigned long totalram;  /*Total memory size to use */

   unsigned long freeram;   /* Available memory size*/

   .

   . 

  }; 

我知道很久以前就有人問過這個問題,但我想提供另一種方法來做到這一點,我發現它對我剛剛解決的問題很有用:

lshw -c memory

小白

lshw 是一個提取機器硬件配置詳細信息的小工具。 它可以在支持 DMI 的 x86 或 IA-64 系統和某些 PowerPC 機器(已知 PowerMac G4 可以工作)上報告確切的內存配置、固件版本、主板配置、CPU 版本和速度、緩存配置、總線速度等。

我發現htop是一個有用的工具。

sudo apt-get install htop

然后

自由 -m

將提供您需要的信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM