站长博客
站长博客随手笔记
Toggle navigation
站长博客
Home
MacOS
Database
Linux
PHP
Git
Golang
About Me
Archives
Tags
解决云服务器开机后,内存与实际不符的问题
2024-08-16 16:32:35
35
0
0
admin
## 起因 最近买了一台新的腾讯云2核4G的服务器,但是开机后发现htop命令显示内存只有3.3G: ![](/api/file/getImage?fileId=66bed29f21548a1784000039) 我觉得很神奇,因为我另一台腾讯云的4核4G的机器,开机之后可用为3.8G。难不成是新的机器缩水了??? ## 求解 抱着求真务实的心态,我进行了探索: 首先使用 ``` dmidecode -t memory ``` 来查看一下主板上内存的信息,发现是4GB,没有缩水。 ``` # 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: 4 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: 4 GB Form Factor: DIMM Set: None Locator: DIMM 0 Bank Locator: Not Specified Type: RAM Type Detail: Other Speed: Unknown Manufacturer: Smdbmds 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 ``` 那神奇了,内存去哪了?经过上网查询,发现可能是Linux内核错误转储的kdump空间的预留导致的 >使用命令 >``` >dmesg | grep -i memory >``` >查看内核预留内存,注意到如下部分: >![](/api/file/getImage?fileId=66bed29f21548a178400003a) 因此查看grub的配置文件: ``` sudo vim /etc/default/grub ``` 发现其中Linux启动的命令行参数为: ``` GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0 console=ttyS0,115200 console=tty0 panic=5 intel_idle.max_cstate=1 intel_pstate=disable processor.max_cstate=1 crashkernel=2G-16G:512M,16G-:768M" ``` 注意最后的 “crashkernel=2G-16G:512M,16G-:768M” 参数,表示系统内存在2G~16G之间的时候,kdump使用512M内存!再看看我4G的那台机器,发现并没有启用kdump。噢,原来相差的500M内存在这里啊! >什么是kdump? >kdump是Linux内核的一个功能,可在发生内核错误时创建核心转储。当被触发时,kdump会导出一个内存映像(也称为vmcore),该映像可用于调试和确定崩溃的原因。 主内存的转储映像作为可执行与可链接格式(ELF)对象导出,可以在处理内核崩溃时通过/proc/vmcore直接访问,也可以自动保存到本地可访问的文件系统、 裸设备或通过网络访问的远程系统。[1][2] 那我能不能把kdump预留的内存调小一点呢?使用以下命令能够查看内核dump所需的内存页面数量: ``` sudo makedumpfile --mem-usage /proc/kcore ``` ![](/api/file/getImage?fileId=66bed29f21548a178400003b) 可以看到内核dump需要使用的是100038个页,大约390M内存。所以腾讯云默认预留512M以便内核崩溃的时候能dump出来,是正确的。 但是!毕竟我们要搞穷鬼玩法!kdump是为了出错后方便分析错误。那我们干脆不分析了吧!那直接关掉kdump功能即可! ### 1. 关闭kdump服务 用以下命令停止kdump服务和禁止开机启动 ``` systemctl stop kdump.service systemctl disable kdump.service ``` 在某些系统kdump的服务名称可能有差别,可以用命令 ``` systemctl list-units --type service | grep kdump ``` 查看服务名称,比如在我的服务器系统(debian)执行此命令后返回: ``` kdump-tools.service loaded active exited Kernel crash dump capture service ``` 则用以下命令停止kdump服务和禁止开机启动 ``` systemctl stop kdump-tools.service systemctl disable kdump-tools.service ``` ### 2. 修改/etc/default/grub文件 * 把crashkernel参数删掉,关掉kdump. * 查看是否有 /etc/default/grub.d 文件夹,如果有则查看此文件夹内是否有 kdump-tools.cfg 文件,如果内容中有crashkernel参数也一并清除掉 * 然后使用以下命令,更新grub参数: ``` sudo grub-mkconfig -o /boot/grub/grub.cfg ``` ![](/api/file/getImage?fileId=66bed29f21548a178400003c) 接着重启服务器即可生效。 可以使用命令查看启动时是否有crashkernel参数: ``` cat /proc/cmdline ``` 转载请注明来源:https://longjin666.cn/?p=1822
Prev:
MacOS 中 MySQL 停止服务后仍旧不断重启的解决办法
Next:
Vi方向键[A [B [C [D问题解决
0
likes
35
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
Table of content