Weniger RAM verfügbar als auf Centos 7 installiert

7

Ich kann anscheinend nicht herausfinden, warum ich weniger RAM als installiert habe. Ich verwende 64-Bit-Centos 7 mit 1 RAM-Modul von 4096 MB auf einem Lenovo x230. Einige Informationen von der betreffenden Maschine:

$ free -m
              total        used        free      shared  buff/cache   available
Mem:           2439        1129         172         124        1137         857
Swap:          2087          41        2046


$ cat /etc/centos-release
CentOS Linux release 7.2.1511 (Core)

$ uname -m
x86_64

$ dmidecode -t memory | grep -i size
    Size: 4096 MB
    Size: No Module Installed

$ lscpu 
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    2
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 58
Model name:            Intel(R) Core(TM) i7-3520M CPU @ 2.90GHz
Stepping:              9
CPU MHz:               1639.519
BogoMIPS:              5786.51
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              4096K
NUMA node0 CPU(s):     0-3

Das BIOS zeigt an, dass 4096 MB RAM installiert werden müssen.

$ dmesg | grep -C 3 -i mtrr
[    0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
[    0.000000] AGP: No AGP bridge found
[    0.000000] e820: last_pfn = 0x11e600 max_arch_pfn = 0x400000000
[    0.000000] MTRR default type: uncachable
[    0.000000] MTRR fixed ranges enabled:
[    0.000000]   00000-9FFFF write-back
[    0.000000]   A0000-BFFFF uncachable
[    0.000000]   C0000-FFFFF write-protect
[    0.000000] MTRR variable ranges enabled:
[    0.000000]   0 base 0FFC00000 mask FFFC00000 write-protect
[    0.000000]   1 base 000000000 mask F80000000 write-back
[    0.000000]   2 base 080000000 mask FC0000000 write-back


$ dmesg | grep -C 3 -i e820
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.10.0-327.13.1.el7.x86_64 ([email protected]) (gcc version 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) ) #1 SMP Thu Mar 31 16:04:38 UTC 2016
[    0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.10.0-327.13.1.el7.x86_64 root=/dev/mapper/centos00-root ro crashkernel=auto rd.lvm.lv=centos00/root rd.lvm.lv=centos00/swap rhgb quiet LANG=en_ZA.UTF-8
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d7ff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009d800-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000001fffffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000020000000-0x00000000201fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000020200000-0x0000000040003fff] usable
[    0.000000] BIOS-e820: [mem 0x0000000040004000-0x0000000040004fff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000040005000-0x000000008c0a0fff] usable
[    0.000000] BIOS-e820: [mem 0x000000008c0a1000-0x00000000dae9efff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000dae9f000-0x00000000daf9efff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x00000000daf9f000-0x00000000daffefff] ACPI data
[    0.000000] BIOS-e820: [mem 0x00000000dafff000-0x00000000df9fffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000f8000000-0x00000000fbffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fec00fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fed08000-0x00000000fed08fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fed10000-0x00000000fed19fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fed1c000-0x00000000fed1ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000ffc00000-0x00000000ffffffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000011e5fffff] usable
[    0.000000] NX (Execute Disable) protection: active
[    0.000000] SMBIOS 2.7 present.
[    0.000000] DMI: LENOVO 2325SRQ/2325SRQ, BIOS G2ETA5WW (2.65 ) 09/17/2015
[    0.000000] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
[    0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
[    0.000000] AGP: No AGP bridge found
[    0.000000] e820: last_pfn = 0x11e600 max_arch_pfn = 0x400000000
[    0.000000] MTRR default type: uncachable
[    0.000000] MTRR fixed ranges enabled:
[    0.000000]   00000-9FFFF write-back
--
[    0.000000]   8 base 11E800000 mask FFF800000 uncachable
[    0.000000]   9 base 11E600000 mask FFFE00000 uncachable
[    0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106
[    0.000000] e820: last_pfn = 0x8c0a1 max_arch_pfn = 0x400000000
[    0.000000] found SMP MP-table at [mem 0x000f0100-0x000f010f] mapped at [ffff8800000f0100]
[    0.000000] Base memory trampoline at [ffff880000097000] 97000 size 24576
[    0.000000] init_memory_mapping: [mem 0x00000000-0x000fffff]
--
[    0.000000] PM: Registered nosave memory: [mem 0xfee00000-0xfee00fff]
[    0.000000] PM: Registered nosave memory: [mem 0xfee01000-0xffbfffff]
[    0.000000] PM: Registered nosave memory: [mem 0xffc00000-0xffffffff]
[    0.000000] e820: [mem 0xdfa00000-0xf7ffffff] available for PCI devices
[    0.000000] Booting paravirtualized kernel on bare hardware
[    0.000000] setup_percpu: NR_CPUS:5120 nr_cpumask_bits:8 nr_cpu_ids:8 nr_node_ids:1
[    0.000000] PERCPU: Embedded 31 pages/cpu @ffff88011e200000 s87168 r8192 d31616 u262144
--
[    0.078755] ACPI: bus type PCI registered
[    0.078756] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5
[    0.078931] PCI: MMCONFIG for domain 0000 [bus 00-3f] at [mem 0xf8000000-0xfbffffff] (base 0xf8000000)
[    0.078933] PCI: MMCONFIG at [mem 0xf8000000-0xfbffffff] reserved in E820
[    0.079010] PCI: Using configuration type 1 for base access
[    0.079718] ACPI: Added _OSI(Module Device)
[    0.079720] ACPI: Added _OSI(Processor Device)
--
[    0.116705] usbcore: registered new device driver usb
[    0.116763] PCI: Using ACPI for IRQ routing
[    0.118451] PCI: pci_cache_line_size set to 64 bytes
[    0.118883] e820: reserve RAM buffer [mem 0x0009d800-0x0009ffff]
[    0.118884] e820: reserve RAM buffer [mem 0x40004000-0x43ffffff]
[    0.118885] e820: reserve RAM buffer [mem 0x8c0a1000-0x8fffffff]
[    0.118886] e820: reserve RAM buffer [mem 0x11e600000-0x11fffffff]
[    0.118961] NetLabel: Initializing
[    0.118962] NetLabel:  domain hash size = 128
[    0.118963] NetLabel:  protocols = UNLABELED CIPSOv4


$ lspci -vnn | grep VGA -A 12
00:02.0 VGA compatible controller [0300]: Intel Corporation 3rd Gen Core processor Graphics Controller [8086:0166] (rev 09) (prog-if 00 [VGA controller])
    Subsystem: Lenovo Device [17aa:21fa]
    Flags: bus master, fast devsel, latency 0, IRQ 27
    Memory at f0000000 (64-bit, non-prefetchable) [size=4M]
    Memory at e0000000 (64-bit, prefetchable) [size=256M]
    I/O ports at 6000 [size=64]
    Expansion ROM at <unassigned> [disabled]
    Capabilities: [90] MSI: Enable+ Count=1/1 Maskable- 64bit-
    Capabilities: [d0] Power Management version 2
    Capabilities: [a4] PCI Advanced Features
    Kernel driver in use: i915

00:14.0 USB controller [0c03]: Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller [8086:1e31] (rev 04) (prog-if 30 [XHCI])

Überprüfen, ob free -m nicht fehlerhaft ist:

mount -t tmpfs -o size=80% none /tempRam
dd if=/dev/zero of=/tempRam/testFile bs=1M count=3096

Ausgabe:

dd: error writing ‘/tempRam/testFile’: No space left on device
1952+0 records in
1951+0 records out
2046541824 bytes (2.0 GB) copied, 4.74288 s, 431 MB/s

Irgendeine Idee, warum ich nur 2,4 GB RAM zur Verfügung habe und wie ich alle 4 GB nutzen kann?

user994144
quelle
3
Da diese Site für Server bestimmt ist und ein Laptop kein Server ist (oder zumindest nicht sein sollte ), stimme ich dafür, diese Frage auf Unix & Linux zu verschieben . Die enge Abstimmung, die Sie sehen, ist eine Umzugsabstimmung.
Jenny D
1
Okay, ich sehe dort einige reservierte Bereiche, aber nichts fällt mir auf, als würde es für fehlende 1,6 GB verantwortlich sein. Seltsam. (Und wenn es sich um eine GPU-Speicherbereichsreservierung handeln würde, wie von Koen van der Rijt vorgeschlagen, würde ich erwarten, dass sie in den e820-Daten als Reservierung angezeigt wird.)
ein CVn
2
@ user994144 Es könnte sein, aber es könnte auch nicht, wenn es durch eine bestimmte Hardware verursacht wird. Auf jeden Fall gibt es hier bei Unix & Linux viele sehr sachkundige Unix-Leute. Eine Unix-Frage hierher zu bringen, ist keine Herabstufung. Auf diese Weise können Sie die Frage an den Ort bringen, an dem Sie mit größerer Wahrscheinlichkeit die beste Hilfe für diese spezielle Frage finden.
Jenny D
1
@ SHW ja Windows 10 zeigt auch rund 2,6 GB
user994144
1
Wenn es sich nicht um eine GPU und reservierte Teile handelt, fällt Ihnen nur ein, ob Sie eine Virtualisierung verwenden oder nicht. Es ist wirklich seltsam. Wofür ist dieser Server / dieses System? Was machst du damit? Irgendeine Virtualisierung? Wenn nein, sollte das Problem mit Ihrem BIOS zusammenhängen, und in diesem Fall ist es wirklich schwierig, das Problem von hier aus zu untersuchen.
FarazX

Antworten:

1

Es gibt viele mögliche Gründe, und es ist ein bisschen unmöglich / unmöglich, das Problem von hier aus zu untersuchen, ohne das System vollständig zu überwachen.

Aber hier werde ich drei mögliche Gründe auflisten:

Zuerst

Der Grund kann aufgrund der Aufgaben, die Sie auf Ihrem System haben, und der Aufgaben, die Sie ausführen, unterschiedlich sein. Er kann unterschiedlich sein, wenn Sie eine Virtualisierung verwenden, wenn Prozesse mit Snapshots verbunden sind und durch die Zuweisung des COW-Speichers (rechts kopieren) Sie die Partitionierungsregeln festlegen ausgeführt werden, speicherabgebildete Datei-E / A, gemeinsam genutzte Objekte, die von ausführbaren Dateien gemeinsam genutzt werden sollen, und weitere gemeinsam genutzte Objektdateien, dynamische Verknüpfung (späte Bindung) usw.

Beachten Sie außerdem, dass Sie Ihren tatsächlichen Gesamtspeicher nicht immer finden können, indem Sie den von allen laufenden Prozessen verwendeten Speicher addieren. Es gibt viele Anwendungen, die aufgrund von gemeinsam genutzten Objekten und anderen RAM-bezogenen Konzepten offenbar mehr Speicher belegen, als tatsächlich auf dem Computer vorhanden ist.

Darüber hinaus dreht sich bei freiem Speicher alles um physischen Speicher, dem keine logischen Daten zugeordnet sind. Ja, wir sollten uns bewusst sein, dass dem nicht verwendeten Speicherteil einige Daten zugeordnet sind, die sich jedoch nicht im aktiven Zustand befinden und von einem laufenden Prozess verwendet werden.

Übrigens: Beachten Sie, dass Unix-ähnliche Systeme so wenig freien Speicher wie möglich haben und anzeigen möchten, nicht den gesamten freien Speicher! Nach Ihren Vermutungen verwenden sie also Speicher, der nicht aktiv Prozessen auf dem laufenden Computer zugeordnet ist, z. B. Puffer für verschiedene E / A-Übertragungsvorgänge und Caches.

Zweite

Ihr BIOS ist möglicherweise fehlerhaft, ABER da es die genaue Größe des Arbeitsspeichers anzeigt, können wir sagen, dass das BIOS nichts auszusetzen hat und dass der Kernel es nicht verwendet.

Das Letzte

Das Letzte, was ich auflisten werde, ist, dass irgendjemandem als Erstes in den Sinn kommt, und das ist reservierter RAM für GPU-bezogene Dinge, insbesondere wenn Sie eine integrierte GPU haben. Aber da die Ausgabe von Ihnen dmesg | grep -C 3 -i e820nichts Falsches zeigt, ist dies nicht Ihr Problem.

Es ist wirklich schwer zu sagen, was Ihr Problem ist, da wir auf Ihrem Server kein tiefes Verständnis haben, aber alles, was Sie in Ihren Fragen und Kommentaren erwähnt haben, und ich denke, wir können von hier aus nichts mehr tun.

Ich empfehle Ihnen ⟼ Führen Sie einen Test durch, z. B. Herunterladen memtest86+durch Ausführen, yum install memtest86+und versuchen Sie, Ihren Speicher zu testen, um festzustellen , wie Ihr Exit-Code lautet. Und Ihren Systemspeicher für eine Weile überwachen, durch Befehle, mit vmstat -a, vmstat -s, cat /proc/meminfo, top, htop, sar -rusw., und sehen , ob Sie etwas seltsam zu sehen.

Wenn die obige Empfehlung nicht geholfen hat ↴

Zwei weitere letzte Optionen: Setzen Sie Ihren RAM zunächst wieder ein. Diese Lenovo-Unterstützung kann Ihnen dabei helfen. Zweitens erstellen und installieren Sie einen neuen Kernel.

Ich hoffe das könnte helfen.

FarazX
quelle
Übrigens, ich habe den RedHat-Support per E-Mail um weitere Informationen gebeten. Ich werde meine Antwort aktualisieren, wann immer und wenn sie weitere mögliche Gründe hinzufügen, aber ich persönlich denke, es sollte nichts anderes geben.
FarazX
Erstens: Wir betrachten den Gesamtspeicher und nicht nur den freien Speicher. Die vom Betriebssystem beanspruchte Gesamtspeichermenge ist weitaus geringer als die tatsächlich vorhandene. Zweitens: Das BIOS zeigt genau die Menge an RAM an, die in den Computer eingefügt wird.
user994144
@ user994144 über den zweiten, sorry mein Fehler, ich habe den zweiten Teil entfernt. Über das erste, ich weiß, ich verstehe. Wie bereits erwähnt, können Sie Ihre Gesamtsumme nicht ermitteln, indem Sie den von anderen Prozessen verwendeten Speicher addieren.
FarazX
Es gibt viele mögliche Gründe, es unterscheidet sich von System zu System.
FarazX
1
Hast du Kumpel, ich weiß, es zeigt dir die genaue Menge an RAM;) Versuche 90-93% deines RAMs voll zu machen, indem du die hier erklärten Dinge oder was auch immer machst und teste, was passieren wird.
FarazX
0

Vielleicht finden Sie diese Seite sehr hilfreich sein.

TL; DR: Die Konfiguration für den Laptop gibt wahrscheinlich weniger an, als tatsächlich verfügbar ist. Dies kann in geändert werden /boot/grub/grub.conf.

theaustinseven
quelle
Ich habe versucht, was in dem Artikel vorgeschlagen wird, ohne Erfolg.
user994144
Diese Dokumente sind für die gemeldete Betriebssystemversion zu alt. CentOS 7 verwendet grub2.
Mike Shultz
0

Sie müssen wissen, wie Sie einen Kernel neu kompilieren, bevor Sie versuchen, etwas damit zu tun.

  1. Wechseln Sie in das Linux-Kernel-Verzeichnis (im Allgemeinen "/ usr / src / linux").
  2. Führen Sie make menuconfig aus (oder machen Sie xconfig, gconfig etc ...)
  3. Gehen Sie zu -> Prozessortypen und -funktionen
  4. Gehen Sie zu -> Unterstützung für hohen Speicher
  5. Wählen Sie dann die entsprechende Option für Ihren Computer aus (die Option "Aus" aktiviert die Unterstützung für weniger als 4 GB).
  6. Kompilieren Sie den Kernel make && make modules && make modules_install neu
  7. Vergessen Sie nicht, Ihren Bootloader neu zu konfigurieren
Gani Rakhmatov
quelle
1
Ich sehe keinen Grund, warum der aktuelle Kernel nicht die richtige Speichergröße anzeigt, da ich dasselbe Betriebssystem auf einem anderen Computer mit derselben Methode installiert habe, die wie erwartet funktioniert.
user994144
0

Ändern Sie für GRUB die GRUB-Konfigurationsdatei unter /boot/grub/grub.conf (und stellen Sie sicher, dass die Kernelversion korrekt ist).

# NOTICE: You have a /boot partition. This means that 
#  all kernel paths are relative to /boot/ 
default=0 
timeout=30 
splashimage=(hd0,0)/grub/splash.xpm.gz 
title Red Hat Enterprise Linux (2.6.9-5.EL)         
root (hd0,0)         
kernel /vmlinuz-2.6.9-5.EL ro root=/dev/hda3 mem=**128M**

und aktualisiere das Maden durch,

sudo yum update-grub

Da CentOS 7 automatisch generiertes GRUB2 und eine /etc/default/grubDatei verwendet, um die Grub-Konfiguration mit dem Befehl durchzuführen. Verwenden grub2-mkconfig Sie die Grub- Befehlszeile , um den installierten Speicher anzugeben.

sudo nano /etc/default/grub 

und füge diese Zeile am eof hinzu,

GRUB_CMDLINE_LINUX="mem=8192m"  (for 8GB)
sudo grub2-mkconfig

Starten Sie das System neu, damit die Änderungen wirksam werden. Verwenden Sie diese Option, cat /proc/meminfo um die vollständige Speichernutzung des Systems anzuzeigen.

Cosmo Arun
quelle