在一个RedHat系列的Rocky/CentOS系统的VPS上,free显示不对,有8G内存但是只显示了7.6G,少了400多MB

[root@test ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:          7.6Gi       4.2Gi       1.4Gi       265Mi       2.0Gi       2.8Gi
Swap:         4.0Gi       1.9Gi       2.1Gi

1、使用dmidecode命令查看linux硬件信息

dmidecode -t memory
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 2.8 present.

Handle 0x1000, DMI type 16, 23 bytes
Physical Memory Array
	Location: Other
	Use: System Memory
	Error Correction Type: Multi-bit ECC
	Maximum Capacity: 8 GB
	Error Information Handle: Not Provided
	Number Of Devices: 1

Handle 0x1100, DMI type 17, 40 bytes
Memory Device
	Array Handle: 0x1000
	Error Information Handle: Not Provided
	Total Width: Unknown
	Data Width: Unknown
	Size: 8 GB
	Form Factor: DIMM
	Set: None
	Locator: DIMM 0
	Bank Locator: Not Specified
	Type: RAM
	Type Detail: Other
	Speed: Unknown
	Manufacturer: QEMU
	Serial Number: Not Specified
	Asset Tag: Not Specified
	Part Number: Not Specified
	Rank: Unknown
	Configured Memory Speed: Unknown
	Minimum Voltage: Unknown
	Maximum Voltage: Unknown
	Configured Voltage: Unknown

可以看到分配的内存是8GB,Size: 8 GB

2、查看内核预留内存

dmesg | grep -i memory
[    0.000000] ACPI: Reserving FACP table memory at [mem 0xbffe12ad-0xbffe1320]
[    0.000000] ACPI: Reserving DSDT table memory at [mem 0xbffdfd80-0xbffe12ac]
[    0.000000] ACPI: Reserving FACS table memory at [mem 0xbffdfd40-0xbffdfd7f]
[    0.000000] ACPI: Reserving APIC table memory at [mem 0xbffe1321-0xbffe13b8]
[    0.000000] Reserving 192MB of memory at 2864MB for crashkernel (System RAM: 8191MB)
[    0.000000] Early memory node ranges
[    0.000000] PM: Registered nosave memory: [mem 0x00000000-0x00000fff]
[    0.000000] PM: Registered nosave memory: [mem 0x0009f000-0x0009ffff]
[    0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000effff]
[    0.000000] PM: Registered nosave memory: [mem 0x000f0000-0x000fffff]
[    0.000000] PM: Registered nosave memory: [mem 0xbffdb000-0xbfffffff]
[    0.000000] PM: Registered nosave memory: [mem 0xc0000000-0xfeffbfff]
[    0.000000] PM: Registered nosave memory: [mem 0xfeffc000-0xfeffffff]
[    0.000000] PM: Registered nosave memory: [mem 0xff000000-0xfffbffff]
[    0.000000] PM: Registered nosave memory: [mem 0xfffc0000-0xffffffff]
[    0.000000] Memory: 2942108K/8388068K available (12293K kernel code, 2261K rwdata, 7872K rodata, 2492K init, 13944K bss, 466944K reserved, 0K cma-reserved)
[    0.001000] Freeing SMP alternatives memory: 32K
[    0.034365] x86/mm: Memory block size: 128MB
[    0.500183] Freeing initrd memory: 26268K
[    0.739956] Non-volatile memory driver v1.3
[    0.873505] Freeing unused decrypted memory: 2036K
[    0.874867] Freeing unused kernel memory: 2492K
[    0.884897] Freeing unused kernel memory: 2012K
[    0.885319] Freeing unused kernel memory: 320K

原来是为crashkernel保留了192MB的内存,属于kdump服务。kdump服务是在系统奔溃时生成内核转储文件

3、停止kdump服务

systemctl stop kdump
systemctl disable kdump

4、修改grub文件

vi /etc/default/grub

将crashkernel=auto改为crashkernel=0

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=0 resume=UUID=7da7c909-4a85-46de-b44f-b693044a68fa"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true

5、更新grub配置文件、重启系统

grub2-mkconfig -o /boot/grub2/grub.cfg
reboot

6、内存增加了190多MB


注意单位GB/MB和GiB/MiB的区别