Linux

為什麼“free”命令和“dmidecode”顯示不同的 RAM 值?

  • September 4, 2016

我有一個在 VMWare 上執行的 CentOS 5.10( ***32 位)伺服器。***它分配了 4 GB 的 RAM。

如果我跑步,dmidecode -t 17 | grep Size | grep MB我會看到:

Size: 4096 MB

然而,當我跑步時free,我看到:

            total       used       free     shared    buffers     cached
Mem:       3107140    1239244    1867896          0        332     400464
-/+ buffers/cache:     838448    2268692
Swap:      2096472          0    2096472

free為什麼記憶體報告的總量和輸出之間存在差異dmidecode

我正在執行的核心是:

2.6.18-371.4.1.el5 #1 SMP Thu Jan 30 06:09:24 EST 2014 i686 i686 i386 GNU/Linux

誠然,核心沒有執行PAE,但我認為只有超過4 GB 的記憶體才需要這樣做。

我知道我錯過了一些簡單的東西 - 有人可以詳細說明嗎?

附加說明/觀察

看起來我的核心確實為其他東西保留了一堆記憶體。這是我看到的/var/log/dmesg

Linux version 2.6.18-371.4.1.el5 (mockbuild@builder17.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-54)) #1 SMP Thu Jan 30 06:09:24 EST 2014
BIOS-provided physical RAM map:
BIOS-e820: 0000000000010000 - 000000000009f800 (usable)
BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000ca000 - 00000000000cc000 (reserved)
BIOS-e820: 00000000000dc000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000bfef0000 (usable)
BIOS-e820: 00000000bfef0000 - 00000000bfeff000 (ACPI data)
BIOS-e820: 00000000bfeff000 - 00000000bff00000 (ACPI NVS)
BIOS-e820: 00000000bff00000 - 00000000c0000000 (usable)
BIOS-e820: 00000000e0000000 - 00000000f0000000 (reserved)
BIOS-e820: 00000000fec00000 - 00000000fec10000 (reserved)
BIOS-e820: 00000000fee00000 - 00000000fee01000 (reserved)
BIOS-e820: 00000000fffe0000 - 0000000100000000 (reserved)
BIOS-e820: 0000000100000000 - 0000000140000000 (usable)
Warning only 4GB will be used.
Use a PAE enabled kernel.
3200MB HIGHMEM available.
896MB LOWMEM available.
found SMP MP-table at 000f6bf0
Memory for crash kernel (0x0 to 0x0) notwithin permissible range

使用 32 位核心,您只有 4GB 的可用地址空間。系統中的(虛擬或物理)硬體(例如影片卡、NIC 等)必須將其中的一些地址空間用於它們自己的目的。這種使用量通常在 256MB-1GB 之間,具體取決於特定硬體需要多少地址空間。

由於該地址空間由硬體使用,相應的 RAM 通常無法訪問 32 位系統。

你有幾個選擇:

  1. 首選選項是執行 64 位作業系統。這極大地擴展了地址空間,因此所有 RAM 和硬體都有足夠的空間。它還打破了應用程序的 2GB/3GB 32 位限制,同時保持了執行 32 位程序的能力。通常,任何具有 2GB 以上 RAM 的系統都應執行 64 位作業系統以避免這些問題。
  2. 另一種選擇是執行啟用了 PAE 的 32 位核心。這將取消隱藏 RAM,但每個程序仍將被限制為 2GB/3GB 的地址空間,具體取決於核心建構的細節。由於 64 位作業系統可以很好地執行 32 位應用程序,因此這沒有任何優勢和許多劣勢(例如缺少升級路徑)。

引用自:https://serverfault.com/questions/640611