사용 가능한 RAM이 Centos 7에 설치된 RAM보다 적습니다.

사용 가능한 RAM이 Centos 7에 설치된 RAM보다 적습니다.

설치된 것보다 사용 가능한 메모리가 적은 이유를 이해할 수 없는 것 같습니다. 저는 1x 4096MB RAM 모듈을 갖춘 Lenovo x230에서 64비트 Centos 7을 실행하고 있습니다. 기계에 관한 일부 정보:

$ 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

BIOS에는 설치될 RAM이 4096MB로 표시됩니다.

$ 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])

오류가 없는지 free -m을 확인하세요.

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

산출:

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

왜 2.4GB RAM만 사용할 수 있고 4GB를 모두 사용할 수 있는지 아시나요?

답변1

가능한 원인은 다양하며 시스템을 완전히 모니터링하지 않고 여기에서 문제를 조사하는 것은 다소 불가능/실행 불가능합니다.

그러나 여기서는 세 가지 가능한 이유를 나열하겠습니다.

첫 번째

원인은 시스템에서 수행되는 작업 및 작업에 따라 다를 수 있습니다. 이는 가상화, 스냅샷 수행과 관련된 프로세스, COW(오른쪽 복사)를 통한 메모리 할당, 파티셔닝 규칙이 다른 경우에 해당될 수 있습니다. 실행, 메모리 매핑된 파일 I/O, 실행 파일 및 추가 공유 개체 파일에서 공유할 공유 개체, 동적 연결(후기 바인딩) 등

또한 실행 중인 모든 프로세스에서 사용 중인 메모리를 합산하여 실제 총 메모리를 항상 찾을 수는 없다는 점에 유의하세요. 공유 개체 및 기타 RAM 관련 개념으로 인해 많은 응용 프로그램이 실제로 시스템에 존재하는 것보다 더 많은 메모리를 사용하는 것처럼 보입니다.

또한 여유 메모리는 논리적 데이터가 매핑되지 않은 물리적 메모리에 관한 것입니다. 예, 메모리의 사용되지 않는 부분에는 일부 데이터가 매핑되어 있지만 활성 상태가 아니고 실행 중인 프로세스에서 사용된다는 점을 알아야 합니다.

그건 그렇고, Unix 계열 시스템은 사용 가능한 모든 메모리가 아닌 가능한 한 적은 메모리를 갖고 표시하기를 원한다는 점에 유의하십시오! 짐작하셨겠지만, 그들이 사용하는 메모리는적극적으로실행 중인 머신의 프로세스에 매핑된 다양한 IO 전송 작업에 사용되는 버퍼 및 캐시입니다.

두번째

BIOS에 문제가 있을 수 있지만 정확한 RAM 용량이 표시되므로 BIOS에는 문제가 없다고 말할 수 있으며, 문제는 커널이 이를 사용하지 않는다는 것입니다.

마침내

마지막으로 나열하고 싶은 것은 누구나 가장 먼저 떠올리는 것인데, 이는 특히 온보드 GPU가 있는 경우 GPU 관련 항목을 위해 RAM을 예약하는 것입니다. 그러나 출력에 dmesg | grep -C 3 -i e820오류가 표시되지 않으므로 이는 문제가 아닙니다.

우리는 귀하의 서버에 대한 깊은 지식이 없기 때문에 귀하의 문제가 무엇인지 말하기 어렵지만 귀하의 질문과 의견에서 언급한 모든 내용으로 볼 때 여기서 우리가 할 수 있는 일은 없다고 생각합니다.

추천드려요⟼예를 들어 memtest86+다운로드를 실행하여 몇 가지 테스트를 수행 yum install memtest86+하고 메모리를 테스트하고 종료 코드가 무엇인지 확인하십시오. 그리고 vmstat -a, vmstat -s, cat /proc/meminfo, tophtop의 명령을 사용하여 일정 시간 동안 시스템 메모리를 모니터링하여 sar -r이상한 점을 발견했는지 확인하십시오.

위의 제안이 도움이 되지 않는 경우 ↴

다른 두 가지 최종 옵션:먼저 RAM을 다시 설치하세요.레노버 지원도움이 될 수도 있습니다. 둘째, 새 커널을 다시 빌드하고 설치합니다.

이게 도움이 되길 바란다.

답변2

당신은 찾을 수 있습니다이것이 페이지는 매우 유용합니다.

핵심요약: 노트북의 구성은 실제로 사용 가능한 것보다 적게 지정할 수 있습니다. 이는 에서 변경할 수 있습니다 /boot/grub/grub.conf.

답변3

커널로 어떤 작업을 시도하기 전에 커널을 다시 컴파일하는 방법을 알아야 합니다.

  1. Linux 커널 디렉터리(보통 "/usr/src/linux")를 입력합니다.
  2. make menuconfig를 실행합니다(또는 make xconfig, gconfig 등...).
  3. -> 프로세서 유형 및 기능으로 이동하세요.
  4. -> 대용량 메모리 지원으로 이동하세요.
  5. 그런 다음 컴퓨터에 적합한 옵션을 선택합니다("끄기" 옵션을 사용하면 4GB 미만만 지원 가능).
  6. 커널 make && makemodules && makemodules_install을 다시 컴파일하십시오.
  7. 부트로더를 재구성하는 것을 잊지 마세요

답변4

GRUB의 경우 /boot/grub/grub.conf에 있는 GRUB 구성 파일을 수정하고 커널 버전이 올바른지 확인하세요.

# 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**

그럽을 업데이트하고,

sudo yum update-grub

CentOS 7은 자동으로 생성된 GRUB2 및 /etc/default/grub파일을 사용하여 grub 명령줄을 사용하여 grub2-mkconfig grub 구성을 위해 설치된 메모리를 지정하므로,

sudo nano /etc/default/grub 

eof에 다음 줄을 추가하세요.

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

변경 사항을 적용하려면 시스템을 다시 시작하십시오. cat /proc/meminfo 시스템의 전체 메모리 사용량을 보려면 사용합니다 .

관련 정보