前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决云服务器开机后,内存与实际不符的问题

解决云服务器开机后,内存与实际不符的问题

作者头像
灯珑LoGin
发布2024-01-22 09:56:42
发布2024-01-22 09:56:42
8272
举报
文章被收录于专栏:龙进的专栏

起因

最近因为搭建scutosc的论坛,买了一台新的腾讯云的2核4G的服务器,但是开机后发现htop命令显示内存只有3.3G:

我觉得很神奇,因为我另一台腾讯云的4核4G的机器,开机之后可用为3.8G。难不成是新的机器缩水了???

求解

抱着求真务实的心态,我进行了探索:

首先使用

代码语言:javascript
复制
dmidecode -t memory

来查看一下主板上内存的信息,发现是4GB,没有缩水。

代码语言:javascript
复制
# 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空间的预留导致的,因此查看grub的配置文件:

代码语言:javascript
复制
sudo vim /etc/default/grub

发现其中Linux启动的命令行参数为:

代码语言:javascript
复制
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所需的内存页面数量:

代码语言:javascript
复制
sudo makedumpfile --mem-usage /proc/kcore

可以看到内核dump需要使用的是100038个页,大约390M内存。所以腾讯云默认预留512M以便内核崩溃的时候能dump出来,是正确的。

但是!毕竟我们要搞穷鬼玩法!kdump是为了出错后方便分析错误。那我们干脆不分析了吧!那直接关掉kdump功能即可!

于是乎,直接修改/etc/default/grub文件,把crashkernel参数删掉,关掉kdump.然后使用以下命令,更新grub参数:

代码语言:javascript
复制
sudo grub-mkconfig -o /boot/grub/grub.cfg

接着重启服务器即可生效

转载请注明来源:https://longjin666.cn/?p=1822

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024年1月22日2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 起因
  • 求解
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档