云服务器实际内存与购买不足量问题

君衍

  • 一、本篇缘由
  • 二、问题研究
    • 1、dmidecode
    • 2、dmesg | grep -i memory
  • 三、kdump
  • 四、解决方案
    • 1、卸载kdump-tools
    • 2、清理依赖包
    • 3、修改配置文件
    • 4、重新生成配置文件
    • 5、重启服务器
    • 6、再次查看

一、本篇缘由

在这里插入图片描述
本篇由于最近买了云服务器,之前基本在本地使用VMware进行虚拟化来部署一些靶场,现在研究安全产品进行测试,所以准备部署在云服务器。之后一直没看内存,直到安装一些服务之后,看到内存之后1771MB。

所以即使厂家拿1G当1000MB,那也不应该只有1771MB,2G的内存,拿二进制算也是2048MB,一点误差能理解,但是这差的有点多。

这里记录下自己的解决方式以及内存不足量的原因。经过自己研究以及查阅资料,原因是kdump导致的。
在这里插入图片描述
可以看到上图使用free命令查看内存大小会发现比2G小很多。

二、问题研究

1、dmidecode

dmidecode 是一个Linux/Unix系统上的命令行工具,用于获取关于计算机硬件相关信息的详细报告。它通过读取系统中的 DMI(Desktop Management Interface,桌面管理接口)信息,可以提供关于硬件组件(如处理器、内存、主板、BIOS等)的详细信息。
使用 dmidecode 命令可以获取的信息包括:

  • 系统的硬件组件类型和详细规格
  • 处理器的型号、速度、核心数等信息
  • 内存模块的容量、类型、速度等信息
  • 主板的制造商、型号、版本号等信息
  • BIOS 的制造商、版本号、发布日期等信息
  • 系统中各硬件设备的序列号和其他标识信息

这里使用dmidecode命令查看底层硬件信息:

root@hcss-ecs-3adb:~# dmidecode
# dmidecode 3.3
Getting SMBIOS data from sysfs.
SMBIOS 2.8 present.
9 structures occupying 491 bytes.
Table at 0x000F6860.# 这部分提供了虚拟机的 BIOS 信息,包括厂商、版本号、发布日期
Handle 0x0000, DMI type 0, 24 bytes
BIOS InformationVendor: SeaBIOSVersion: rel-1.10.2-0-g5f4c7b1-20230409_040737-szxrtosci10000Release Date: 04/01/2014Address: 0xE8000Runtime Size: 96 kBROM Size: 64 kBCharacteristics:BIOS characteristics not supportedTargeted content distribution is supportedBIOS Revision: 0.0# 这部分包含了系统的一般信息,如制造商、产品名称、版本号、序列号、UUID
Handle 0x0100, DMI type 1, 27 bytes
System InformationManufacturer: OpenStack FoundationProduct Name: OpenStack NovaVersion: 13.2.1-20240426143905_3138e2aSerial Number: d92cff69-5f58-4ef8-bd0a-5b3718bc3ba8UUID: d92cff69-5f58-4ef8-bd0a-5b3718bc3ba8Wake-up Type: Power SwitchSKU Number: Not SpecifiedFamily: Virtual Machine# 这部分描述了系统机箱(虚拟机的情况下一般是模拟的),包括类型、版本号和资产标签
Handle 0x0300, DMI type 3, 22 bytes
Chassis InformationManufacturer: Not SpecifiedType: OtherLock: Not PresentVersion: pc-i440fx-2.8Serial Number: Not SpecifiedAsset Tag: HUAWEICLOUDBoot-up State: SafePower Supply State: SafeThermal State: SafeSecurity Status: UnknownOEM Information: 0x00000000Height: UnspecifiedNumber Of Power Cords: UnspecifiedContained Elements: 0SKU Number: Not Specified# 这部分提供了处理器的信息,包括制造商、型号、速度、核心数
Handle 0x0400, DMI type 4, 42 bytes
Processor InformationSocket Designation: CPU 0Type: Central ProcessorFamily: OtherManufacturer: QEMUID: 57 06 05 00 FF FB 8B 0FVersion: pc-i440fx-2.8Voltage: UnknownExternal Clock: UnknownMax Speed: 2000 MHzCurrent Speed: 2000 MHzStatus: Populated, EnabledUpgrade: OtherL1 Cache Handle: Not ProvidedL2 Cache Handle: Not ProvidedL3 Cache Handle: Not ProvidedSerial Number: Not SpecifiedAsset Tag: Not SpecifiedPart Number: Not SpecifiedCore Count: 1Core Enabled: 1Thread Count: 2Characteristics: None# 描述了物理内存数组的信息,包括其位置和最大容量
Handle 0x1000, DMI type 16, 23 bytes
Physical Memory ArrayLocation: OtherUse: System MemoryError Correction Type: Multi-bit ECCMaximum Capacity: 2 GBError Information Handle: Not ProvidedNumber Of Devices: 1# 这部分提供了内存设备的详细信息,如大小、类型、制造商
Handle 0x1100, DMI type 17, 40 bytes
Memory DeviceArray Handle: 0x1000Error Information Handle: Not ProvidedTotal Width: UnknownData Width: UnknownSize: 2 GBForm Factor: DIMMSet: NoneLocator: DIMM 0Bank Locator: Not SpecifiedType: RAMType Detail: OtherSpeed: UnknownManufacturer: QEMUSerial Number: Not SpecifiedAsset Tag: Not SpecifiedPart Number: Not SpecifiedRank: UnknownConfigured Memory Speed: UnknownMinimum Voltage: UnknownMaximum Voltage: UnknownConfigured Voltage: Unknown# 描述了内存数组映射地址的信息
Handle 0x1300, DMI type 19, 31 bytes
Memory Array Mapped AddressStarting Address: 0x00000000000Ending Address: 0x0007FFFFFFFRange Size: 2 GBPhysical Array Handle: 0x1000Partition Width: 1# 提供了系统引导信息,显示系统引导状态正常,未检测到错误
Handle 0x2000, DMI type 32, 11 bytes
System Boot InformationStatus: No errors detectedHandle 0x7F00, DMI type 127, 4 bytes
End Of Table

以上可以看到没有问题,提供的是2G的内存,但是,这部分内存不包括OS内核基本数据结构消耗以及内核预留内存。
所以这里没什么问题,下面我们查看内核的预留内存。

2、dmesg | grep -i memory

dmesg | grep -i memory 是一个在Linux系统中用来查找与内存相关的信息的命令。具体地说,它会从系统日志 (dmesg 输出) 中筛选出包含 “memory” 关键词的行,并将它们显示在终端上。
在这里插入图片描述
这个命令可以用来快速检查系统引导时内核启动阶段所记录的内存相关信息,例如内存检测、内存模块的初始化状态、内存大小的报告等。
这里可以看到为为 crashkernel 预留了 192M 的内存,接着我们可以通过查阅官方文档:
在这里插入图片描述
(这里虽然我使用Ubuntu,但是红帽都是Linux,还是可以参考下的)

kdump 的内存保留在系统引导过程中发生。内存大小是在系统的 Grand Unified Bootloader (GRUB)配置中设定的。内存大小取决于配置文件中指定的 crashkernel= 选项的值以及系统物理内存的大小。
您可以使用多种方式定义 crashkernel= 选项。您可以指定 crashkernel= 值或配置 auto 选项。crashkernel=auto 参数根据系统中的物理内存总量自动保留内存。配置后,内核将自动为捕获内核保留适当数量的所需内存。这有助于防止内存不足(OOM)错误。

所以可以确定,华为云提供的镜像,默认开启了kdump服务。当 Linux 内核出现了故障时 kdump 会协助产生一个 dump 文件,记录下此时的内存运行参数等信息,便于用户后续对内核问题的定位分析。可以看到crashkernel 预留的内存就是因为这个原因。
这里简单说下,之后我们对kdump服务进行详细了解。kdump服务对于低配的VPS,就变成了鸡肋,这种低配服务器1G,2G面前,本身内存不够,所以没有必要启用kdump,开启的话可能也会导致内存不足之后服务崩溃等等奇奇怪怪的问题。

三、kdump

红帽对于kdump的讲解:官方文档
kdump 是一个提供崩溃转储机制,并生成一个转储文件的服务,称为崩溃转储或 vmcore 文件。vmcore 文件包含系统内存的内容,有助于分析和故障排除。kdump 使用 kexec 系统调用引导到第二个内核,这是一个不需要重启的 捕获内核,然后捕获崩溃内核内存的内容,并将其保存到一个文件中。第二个内核位于系统内存的保留部分。

当系统出现故障时,内核崩溃转储是唯一可用的信息。因此,在关键任务环境中操作 kdump 非常重要。红帽建议在常规内核更新周期中定期更新和测试 kexec-tools。这在安装新内核功能时尤为重要。

其实kdump是一个系统崩溃时收集信息的工具,所以对于一般研究练习,没有必要开启。

四、解决方案

两种方式,一种关闭kdump服务,第二种直接卸载,我使用第二种方式,直接将其卸载,避免再出问题。
需要注意都需要root权限

1、卸载kdump-tools

apt purge kdump-tools

在这里插入图片描述

2、清理依赖包

apt autoremove

在这里插入图片描述

3、修改配置文件

vim /etc/default/grub

将其中的crashkernel=xxx字段全部删除:

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=menu
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX="net.ifnames=0 consoleblank=600 console=tty0 console=ttyS0,115200n8 noibrs crashkernel=0M"

这里将默认直接删完,同时其实也可以将下面的启动参数也删了,也可以直接设置0M。
在这里插入图片描述
这里稍加解读下,以上是GRUB的配置项,用于设置 Linux 系统的启动选项。

  1. GRUB_DEFAULT=0:
    • 指定默认启动的操作系统条目的索引。这里设置为 0 表示默认启动第一个条目(通常是第一个内核)。
  2. GRUB_TIMEOUT_STYLE=menu:
    • 设置 GRUB 的超时样式为菜单模式,即在启动时如果超时时间到了,会显示一个启动菜单供用户选择。
  3. GRUB_TIMEOUT=10:
    • 设置 GRUB 的超时时间为 10 秒。如果用户没有选择操作系统,系统将会在超过这个时间后启动默认的操作系统。
  4. GRUB_DISTRIBUTOR=lsb_release -i -s 2> /dev/null || echo Debian:
    • 指定 GRUB 菜单中的发行版信息。这里使用 lsb_release 命令来获取发行版信息,如果获取失败(通过重定向错误输出到 /dev/null),则默认显示为 “Debian”。
  5. GRUB_CMDLINE_LINUX_DEFAULT=“”:
    • 设置 Linux 内核的默认启动参数。这里是空字符串,表示没有额外的默认参数。
  6. GRUB_CMDLINE_LINUX=“net.ifnames=0 consoleblank=600 console=tty0 console=ttyS0,115200n8 noibrs crashkernel=0M”:
    • 设置 Linux 内核的启动参数。
      • net.ifnames=0: 禁用预测可预见的接口命名,使用传统的网络接口命名方式。
      • consoleblank=600: 设置控制台空闲超时时间为 600 秒,如果超过这个时间没有键盘输入,控制台屏幕会自动关闭。
      • console=tty0: 设置第一个虚拟控制台为标准输入输出设备。
      • console=ttyS0,115200n8: 将串行端口 ttyS0 配置为控制台,波特率为 115200,数据位为 8 位,无校验位。
      • noibrs: 禁用 Indirect Branch Restricted Speculation (IBRS),这是一种 CPU 漏洞 (Spectre Variant 2) 的缓解措施。
      • crashkernel=0M: 禁用内核崩溃转储区域,指定为 0M 表示不分配内存用于崩溃转储。

这里需要注意,两个都需要更改:
在这里插入图片描述

4、重新生成配置文件

update-grub2

在这里插入图片描述

5、重启服务器

reboot

这里一定需要注意重新启动。

6、再次查看

free -m
dmesg | grep -i memory

在这里插入图片描述
可以看到这里可用内存已经从1771变为了1963,同时预留内存可以看到已经没有了,(比之前多了192M)。
希望可以帮助到各位。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/46876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web自动化测试selenium的基本使用

目录 初始化浏览器并打开网页 定位网页元素 定位的方法 模拟键盘操作 模拟鼠标操作 xpath方法 xpath结点 路径表达式 轴 selenium是一个很流行的自动化测试的库,主要用于模拟浏览器的运行,是web应用测试的工具。 在使用selenium时,…

(二)高并发压力测试调优篇——caffeine本地缓存调优

前言 在上一节内容中我们主要介绍了高并发请求下,mysql数据库的调优,其调优的主要原理是尽量减少数据库的IO操作,从而提高服务器的访问性能。在此基础上,本节内容是关于如何利用缓存,提高系统的并发访问能力。我们会首…

Linux部署禅道(无脑复制版)

目录 环境部署1、下载,解压2、启动3、设置开机自启 登录禅道登录数据库1、设置账号2、网页登录数据库 环境 Linux系统 Centos7 《Linux一键安装包安装禅道》视频链接: https://www.zentao.net/zentao-install/zentao-linux-install-80523.html 部署 …

谢启昆:乾隆年间的清廉典范与学术巨擘

谢启昆,一位生活在清朝乾隆年间的杰出人物,以其清廉的政绩和卓越的学术成就,成为后世效仿的典范。他的画像中,目光如炬,透露出坚毅与智慧的光芒,仿佛在诉说着他不平凡的一生。 谢启昆出生在一个书香门第&am…

多元统计分析概述

目录 1. 多元回归分析 2. 主成分分析(PCA) 3. 因子分析 4. 判别分析 5. 聚类分析 6. 多维尺度分析(MDS) 结论 多元统计分析是一组用于分析多个变量之间关系的统计方法。它广泛应用于各个领域,如市场研究、生物医…

PHP webshell 免杀方法

本文介绍php类webshell简单的免杀方法,总结不一定全面,仅供读者参考。 webshell通常可分为一句话木马,小马,大马,内存马。 一句话木马是最简单也是最常见的webshell形式,这种木马体积小,隐蔽较…

a newer or same version is present nvidia解决方案

安装时候出现a newer or same version is present nvidia 或者Night Visual Editor 失败,把显卡驱动卸载掉,打开service.mtc 服务控制面板,把nvidia开头的服务全停掉,重新启动cuda安装程序选择自定义安装 vse visual studio相关的…

鸿蒙语言基础类库:【@system.device (设备信息)】

设备信息 说明: 从API Version 6开始,该接口不再维护,推荐使用新接口[ohos.deviceInfo]进行设备信息查询。本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import dev…

手把手教你,如何利用积木易搭3D扫描仪完成文物三维建模?

当前,文物三维建模主要技术手段主要有摄影测量技术、三维激光扫描技术、结构光扫描技术。其中,积木易搭的MagicScan作为一款先进的3D扫描仪,是正是运用了结构光扫描技术的精髓,它巧妙地融合了点云相机的高精度空间数据采集能力、纹…

如何用python写接口

如何用python写接口?具体步骤如下:  1、实例化server 2、装饰器下面的函数变为一个接口 3、启动服务 开发工具和流程: python库:flask 》实例化server:server flask.Flask(__name__) 》server.route(/index,met…

【STM32嵌入式系统设计与开发---拓展】——1_9 GPIO的输入和输出

这里写目录标题 0、输入 输出1、输出(1)GPIO_SetBits:用于设置 GPIO 引脚的状态(即将指定的引脚设置为高电平) 2、输入(1)GPIO_ReadInputDataBit() 0、输入 输出 咋们定义了一个结构…

解决ESLint和Prettier冲突的问题

在配置了ESLint的项目中使用Prettier进行格式化可能会出现冲突,不如Prettier配置了使用双引号,ESLint配置了单引号,当然可以一个一个改成一样的配置,但是比较麻烦。我发现可以直接使用ESLint的规则进行格式化。在VSCode配置过程如…

xss复习总结及ctfshow做题总结xss

xss复习总结 知识点 1.XSS 漏洞简介 ​ XSS又叫CSS(Cross Site Script)跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的…

软考从报考到拿到证书的过程

一、报考阶段及参加考试阶段 这个阶段可以留意软考官网的的信息,一般上半年是3月份报名、5月份考试;下半年是8月份报名、11月份考试。以下是这个阶段会用到的链接,保持关注就好。 软考官网:中国计算机技术职业资格网 (ruankao.o…

六、 SpringBoot 配置⽂件 ★ ✔【value的引号注意事项、@ConfigurationProperties 、】

六、 SpringBoot 配置⽂件 本节⽬标1. 配置⽂件作⽤2. 配置⽂件快速⼊⼿3. 配置⽂件的格式4. properties 配置⽂件说明4.1 properties 基本语法4.2 读取配置⽂件4.3 properties 缺点分析 5. yml 配置⽂件说明5.1 yml 基本语法5.2 yml 使⽤进阶5.2.1 yml 配置不同数据类型及 nul…

【GD32】从零开始学GD32单片机 | WDGT看门狗定时器+独立看门狗和窗口看门狗例程(GD32F470ZGT6)

1. 简介 看门狗从本质上来说也是一个定时器,它是用来监测硬件或软件的故障的;它的工作原理大概就是开启后内部定时器会按照设置的频率更新,在程序运行过程中我们需不断地重装载看门狗,以使它不溢出;如果硬件或软件发生…

Vue实现滚动元素始终固定在最底部

1. 应用场景——聊天 在聊天的时候,展示聊天内容的元素是可以滚动的,通过上下滚动来查看过往消息。不过在首次打开聊天页面以及发送新消息时需要固定在滚动的最底部以及时展示最新的消息,这样才能获得比较好的用户体验。 效果: …

C++——类和对象(下)

文章目录 一、再探构造函数——初始化列表二、 类型转换三、static成员静态成员变量静态成员函数 四、 友元友元函数友元类 五、内部类六、匿名对象 一、再探构造函数——初始化列表 之前我们实现构造函数时,初始化成员变量主要使⽤函数体内赋值,构造函…

PostgreSQL使用(二)

说明:本文介绍PostgreSQL的DML语言; 插入数据 -- 1.全字段插入,字段名可以省略 insert into tb_student values (1, 张三, 1990-01-01, 88.88);-- 2.部分字段插入,字段名必须写全 insert into tb_student (id, name) values (2,…