释放vps的保留内存

Linux 系统默认会保留一块内存用于kdump,这块内存的大小可以通过crashkernel参数来设置,许多应用开发者一般不会触发内核崩溃,可以通过修改/etc/default/grub文件来释放出这块内存。

如果不需要kdump,可以将crashkernel参数设置为0M-1G:0M,1G-4G:0M,4G-128G:0M,128G-:512M,这样就可以释放出一块内存。

查看方式: cat /etc/default/grub

默认值如下:

GRUB_CMDLINE_LINUX=" vga=792 console=tty0 console=ttyS0,115200n8 net.ifnames=0 noibrs nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295 iommu=pt crashkernel=0M-1G:0M,1G-4G:192M,4G-128G:384M,128G-:512M crash_kexec_post_notifiers=1"

解释下crashkernel字段其含义是, 0-1G内存的主机保留0M内存, 1-4G内存的主机保留192M内存, 4-128G内存的主机保留384M内存, 128G以上的主机保留512M内存.

1G 内存的主机会向上划分到1-4G档, 保留 192MB 内存用于 kdump. 4G 内存的主机会向上划分到4-128G档, 保留 384MB 内存用于 kdump.

修改方式: sudo sed -i 's/crashkernel=0M-1G:0M,1G-4G:192M,4G-128G:384M,128G-:512M/crashkernel=0M-1G:0M,1G-4G:0M,4G-128G:0M,128G-:512M/' /etc/default/grub

重启生效: sudo update-grub && sudo reboot

以新手学习常用的 2C1G 的 vps 为例,一个干净系统修改前后的内存空间如下, 可以看到 366MB 和 562MB 的区别还是挺大的.

# 修改前
root@iZj6c0otki9ho421eewyczZ:~# free
               total        used        free      shared  buff/cache   available
Mem:          707180      340772      123400        2624      358872      366408
Swap:              0           0           0

# 修改后
root@iZj6c0otki9ho421eewyczZ:~# free
               total        used        free      shared  buff/cache   available
Mem:          903788      341656      451380        2616      251032      562132
Swap:              0           0           0

2C4G 的 vps 修改前后的内存空间如下, 3.1GB 和 3.5GB 的区别.

# 修改前
root@iZj6c1prxn78ilvd2inku1Z:~# free
               total        used        free      shared  buff/cache   available
Mem:         3512696      377672     2870944        1260      415116     3135024
Swap:              0           0           0

# 修改后
root@iZj6c1prxn78ilvd2inku1Z:~# free
               total        used        free      shared  buff/cache   available
Mem:         3905912      374468     3408304        1252      270508     3531444
Swap:              0           0           0

更多关于 kdump 的介绍

Kdump 是一种内核崩溃转储机制,用于在 Linux 系统内核崩溃时捕获系统的内存状态。它基于 kexec 技术,kexec 允许一个 Linux 内核启动另一个 Linux 内核而不经过 BIOS 初始化过程,这使得系统可以在崩溃后快速地引导到一个新的内核(也称为捕获内核或 crashkernel)。

当系统遇到致命错误并触发了内核错误(kernel panic)时,当前运行的内核(也称为主内核)会使用 kexec 加载预先准备好的捕获内核,并将系统的内存内容保存到一个指定的位置,如磁盘上的特定分区或者通过网络发送到另一台机器。这个保存下来的内存映像文件(vmcore 或者 kdump 文件)可以被用来进行事后分析,帮助开发者或系统管理员找出导致崩溃的原因。

为了启用 kdump 功能,通常需要在系统启动配置中预留一部分内存给捕获内核,这样即使主内核崩溃,这部分内存也能保持不受影响,从而保证捕获内核能够正常工作并完成内存转储的任务。配置和使用 kdump 通常涉及修改引导加载程序设置、调整内核参数以及设置适当的存储位置来保存 vmcore 文件。