释放vps的保留内存
Categories:
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 文件。