背景

CentOS最后一个LTS版本CentOS7即将在2024年6月30日退役,最近开始把手里所有的VPS都更换了一遍系统,通过free -hm查看内存信息时显示不对,有1G内存但是只显示了758MB,少了200多MB:

[root@extkit ~]# free -mh
              total        used        free      shared  buff/cache   available
Mem:          758Mi       159Mi       286Mi       8.0Mi       312Mi       462Mi
Swap:         1.0Gi        91Mi       933Mi

原因分析

Linux系统启动时会初始化相关设备,该过程会占用内存。内核启动时也会占用一部分的内存,此外kdump也占用了一部分内存但是其使用内存大小是可以自行设置的。free -mh命令查询的只是VPS的可用内存。如果要查询实际硬件内存大小就需要使用dmidecode -t memory命令了。

[root@extkit ~]# dmidecode -t memory
# dmidecode 3.3
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: 1 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: 1 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

可以看到分配的内存Maximum Capacity是1GB。此外,内核预留内存可以通过如下命令查看:

[root@extkit ~]# dmesg | grep -i memory
[    0.000000] ACPI: Reserving FACP table memory at [mem 0x3ffe0edc-0x3ffe0fcf]
[    0.000000] ACPI: Reserving DSDT table memory at [mem 0x3ffdf040-0x3ffe0edb]
[    0.000000] ACPI: Reserving FACS table memory at [mem 0x3ffdf000-0x3ffdf03f]
[    0.000000] ACPI: Reserving APIC table memory at [mem 0x3ffe0fd0-0x3ffe1047]
[    0.000000] ACPI: Reserving SSDT table memory at [mem 0x3ffe1048-0x3ffe1111]
[    0.000000] ACPI: Reserving HPET table memory at [mem 0x3ffe1112-0x3ffe1149]
[    0.000000] ACPI: Reserving SRAT table memory at [mem 0x3ffe114a-0x3ffe1201]
[    0.000000] ACPI: Reserving MCFG table memory at [mem 0x3ffe1202-0x3ffe123d]
[    0.000000] ACPI: Reserving WAET table memory at [mem 0x3ffe123e-0x3ffe1265]
[    0.000000] Reserving 192MB of memory at 544MB for crashkernel (System RAM: 1023MB)
[    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] Memory: 195532K/1048004K available (14341K kernel code, 5952K rwdata, 8520K rodata, 2608K init, 26336K bss, 354768K reserved, 0K cma-reserved)
[    0.024456] Freeing SMP alternatives memory: 36K
[    0.035523] x86/mm: Memory block size: 128MB
[    0.778024] Freeing initrd memory: 75064K
[    0.903390] Non-volatile memory driver v1.3
[    1.117384] Freeing unused decrypted memory: 2036K
[    1.118092] Freeing unused kernel image (initmem) memory: 2608K
[    1.119848] Freeing unused kernel image (text/rodata gap) memory: 2012K
[    1.120685] Freeing unused kernel image (rodata/data gap) memory: 1720K

为crashkernel保留了192MB的内存,这部分属于kdump服务,在系统奔溃时可以生成内核转储文件。需要注意的是如无特殊要求,请勿自行修改kdump占用的内存大小。如果非要修改的话可以通过如下步骤进行设置:

关闭kdump服务释放内存

[root@extkit ~]# systemctl stop kdump
[root@extkit ~]# systemctl disable kdump
[root@extkit ~]# 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 no_timer_check net.ifnames=0 biosdevname=0 console=tty0 console=ttyS0,115200"
GRUB_DISABLE_RECOVERY="true"
GRUB_DISABLE_UUID=true
GRUB_ENABLE_BLSCFG=true

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

[root@extkit ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
[root@extkit ~]# reboot

 

声明
1.本网站名称: 盲盒博客
2.本站永久网址:https://exakit.com
3.本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长support@exakit.com
4.本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责
5.本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6.本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新