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

news2024/9/22 23:29:50

君衍

  • 一、本篇缘由
  • 二、问题研究
    • 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 Information
        Vendor: SeaBIOS
        Version: rel-1.10.2-0-g5f4c7b1-20230409_040737-szxrtosci10000
        Release Date: 04/01/2014
        Address: 0xE8000
        Runtime Size: 96 kB
        ROM Size: 64 kB
        Characteristics:
                BIOS characteristics not supported
                Targeted content distribution is supported
        BIOS Revision: 0.0

# 这部分包含了系统的一般信息,如制造商、产品名称、版本号、序列号、UUID
Handle 0x0100, DMI type 1, 27 bytes
System Information
        Manufacturer: OpenStack Foundation
        Product Name: OpenStack Nova
        Version: 13.2.1-20240426143905_3138e2a
        Serial Number: d92cff69-5f58-4ef8-bd0a-5b3718bc3ba8
        UUID: d92cff69-5f58-4ef8-bd0a-5b3718bc3ba8
        Wake-up Type: Power Switch
        SKU Number: Not Specified
        Family: Virtual Machine

# 这部分描述了系统机箱(虚拟机的情况下一般是模拟的),包括类型、版本号和资产标签
Handle 0x0300, DMI type 3, 22 bytes
Chassis Information
        Manufacturer: Not Specified
        Type: Other
        Lock: Not Present
        Version: pc-i440fx-2.8
        Serial Number: Not Specified
        Asset Tag: HUAWEICLOUD
        Boot-up State: Safe
        Power Supply State: Safe
        Thermal State: Safe
        Security Status: Unknown
        OEM Information: 0x00000000
        Height: Unspecified
        Number Of Power Cords: Unspecified
        Contained Elements: 0
        SKU Number: Not Specified

# 这部分提供了处理器的信息,包括制造商、型号、速度、核心数
Handle 0x0400, DMI type 4, 42 bytes
Processor Information
        Socket Designation: CPU 0
        Type: Central Processor
        Family: Other
        Manufacturer: QEMU
        ID: 57 06 05 00 FF FB 8B 0F
        Version: pc-i440fx-2.8
        Voltage: Unknown
        External Clock: Unknown
        Max Speed: 2000 MHz
        Current Speed: 2000 MHz
        Status: Populated, Enabled
        Upgrade: Other
        L1 Cache Handle: Not Provided
        L2 Cache Handle: Not Provided
        L3 Cache Handle: Not Provided
        Serial Number: Not Specified
        Asset Tag: Not Specified
        Part Number: Not Specified
        Core Count: 1
        Core Enabled: 1
        Thread Count: 2
        Characteristics: None

# 描述了物理内存数组的信息,包括其位置和最大容量
Handle 0x1000, DMI type 16, 23 bytes
Physical Memory Array
        Location: Other
        Use: System Memory
        Error Correction Type: Multi-bit ECC
        Maximum Capacity: 2 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: 2 GB
        Form Factor: DIMM
        Set: None
        Locator: DIMM 0
        Bank Locator: Not Specified
        Type: RAM
        Type Detail: Other
        Speed: Unknown
        Manufacturer: QEMU
        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

# 描述了内存数组映射地址的信息
Handle 0x1300, DMI type 19, 31 bytes
Memory Array Mapped Address
        Starting Address: 0x00000000000
        Ending Address: 0x0007FFFFFFF
        Range Size: 2 GB
        Physical Array Handle: 0x1000
        Partition Width: 1

# 提供了系统引导信息,显示系统引导状态正常,未检测到错误
Handle 0x2000, DMI type 32, 11 bytes
System Boot Information
        Status: No errors detected

Handle 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.coloradmin.cn/o/1930117.html

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

相关文章

初识单片机之点亮LED灯

1、前言 如果说编程的开始是Hello world,那么单片机的开始就是点亮LED灯,这个操作最直接的展示了单片机强大的控制功能,这里我就以直接点亮指定位置的LED灯的形式演示这个功能。 2、原理介绍 我的单片机的LED灯都是接在单片机的P1口,从P10~P…

【数据结构(邓俊辉)学习笔记】高级搜索树02——B树

文章目录 1. 大数据1.1 640 KB1.2 越来越大的数据1.3 越来越小的内存1.4 一秒与一天1.5 分级I/O1.6 1B 1KB 2. 结构2.1 观察体验2.2 多路平衡2.3 还是I/O2.4 深度统一2.5 阶次含义2.6 紧凑表示2.7 BTNode2.8 BTree 3. 查找3.1 算法过程3.2 操作实例3.3 算法实现3.4 主次成本3.…

YOLOv8白皮书-第Y8周:yolov8.yaml文件解读

本文为365天深度学习训练营中的学习记录博客 原作者:K同学啊|接辅导、项目定制 请根据YOLOv8n、YOLOv8s模型的结构输出,手写出YOLOv8l的模型输出 文件位置:./ultralytics/cfg/models/v8/yolov8.yaml 一、参数配置 # Parameters nc: 80 # n…

Bug:时间字段显示有问题

Bug:时间字段显示有问题 文章目录 Bug:时间字段显示有问题1、问题2、解决方法一:添加注解3、解决方法二:消息转换器自定义对象映射器配置消息转换器 1、问题 ​ 在后端传输时间给前端的时候,发现前端的时间显示有问题…

设计模式总结(设计模式的原则及分类)

1.什么是设计模式? 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结…

自动化任务调度,轻松管理海量数据采集项目

摘要: 本文深入探讨了在数据驱动时代,如何通过自动化任务调度轻松驾驭海量数据采集项目,提升工作效率,确保数据处理的准确性和及时性。我们分享了一系列实用策略与工具推荐,帮助企业和开发者优化数据采集流程&#xf…

SQL 中的 EXISTS 子句:探究其用途与应用

目录 EXISTS 子句简介语法 EXISTS 与 NOT EXISTSEXISTS 子句的工作原理实际应用场景场景一:筛选存在关联数据的记录场景二:优化查询性能 EXISTS 与其他 SQL 结构的比较EXISTS vs. JOINEXISTS vs. IN 多重 EXISTS 条件在 UPDATE 语句中使用 EXISTS常见问题…

基于 AntV F2 的雷达图组件开发

本文由ScriptEcho平台提供技术支持 项目地址:传送门 基于 AntV F2 的雷达图组件开发 应用场景介绍 雷达图是一种多变量统计图表,用于可视化展示多个维度的数据。它通常用于比较不同对象的多个属性或指标,直观地反映各维度之间的差异和整体…

LoRaWAN协议

目录 一、介绍 1、LPWA是什么? 2、LoRa是什么? 3、LoRaWAN是什么? 4、浅谈LoRa与LoRaWAN的区别 5、LoRaWAN开发背景 6、LoRaWAN与NB-IOT如何选择? 二、LoRaWAN网络结构 1、组网结构 2、星型拓扑结构 三、数据格式 1、…

golang AST语法树解析

1. 源码示例 package mainimport ("context" )// Foo 结构体 type Foo struct {i int }// Bar 接口 type Bar interface {Do(ctx context.Context) error }// main方法 func main() {a : 1 }2. Golang中的AST golang官方提供的几个包,可以帮助我们进行A…

代码随想录算法训练营第五十五天|101.孤岛的总面积、102.沉没孤岛、103.水流问题、104.建造最大岛屿

101.孤岛的总面积 题目链接:101.孤岛的总面积沉没孤岛 文档讲解:代码随想录 状态:不会 思路: 步骤1:将边界上的陆地变为海洋 步骤2:计算孤岛的总面积 题解: public class Main {// 保存四个方…

【UE5.1】NPC人工智能——02 NPC移动到指定位置

效果 步骤 1. 新建一个蓝图,父类选择“AI控制器” 这里命名为“BP_NPC_AIController”,表示专门用于控制NPC的AI控制器 2. 找到我们之前创建的所有NPC的父类“BP_NPC” 打开“BP_NPC”,在类默认值中,将“AI控制器类”一项设置为“…

动手学深度学习——3.多层感知机

1.线性模型 线性模型可能出错 例如,线性意味着单调假设: 任何特征的增大都会导致模型输出的增大(如果对应的权重为正), 或者导致模型输出的减小(如果对应的权重为负)。 有时这是有道理的。 例…

R绘制Venn图及其变换

我自己在用R做各种分析时有不少需要反复用到的基础功能,比如一些简单的统计呀,画一些简单的图等等,虽说具体实现的代码也不麻烦,但还是不太想每次用的时候去找之前的代码。 索性将常用的各种函数整成了一个包:pcutils…

前端JS特效第34集:jQuery俩张图片局部放大预览插件

jQuery俩张图片局部放大预览插件&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下(全部代码在文章末尾)&#xff1a; <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Co…

数据结构与算法02迭代|递归

目录 一、迭代(iteration) 1、for循环 2、while循环 二、递归&#xff08;recursion&#xff09; 1、普通递归 2、尾递归 3、递归树 三、对比 简介&#xff1a;在算法中&#xff0c;重复执行某个任务是常见的&#xff0c;它与复杂度息息相关&#xff0c;在程序中实现重…

MySQL MVCC原理

全称Multi-Version Concurrency Control&#xff0c;即多版本并发控制&#xff0c;主要是为了提高数据库的并发性能。 1、版本链 对于使用InnoDB存储引擎的表来说&#xff0c;它的聚簇索引记录中都包含两个必要的隐藏列&#xff1a; 1、trx_id&#xff1a;每次一个事务对某条…

connect by prior 递归查询

connect by prior 以公司组织架构举例&#xff0c;共四个层级&#xff0c;总公司&#xff0c;分公司&#xff0c;中心支公司&#xff0c;支公司 总公司level_code为1 下一层级的parent_id为上一层级的id&#xff0c;建立关联关系 SELECT id, name, LEVEL FROM org_info a STA…

区块链学习05-web3中solidity和move语言

Solidity 和 Move 语言的比较&#xff1a;Web3 开发中的两种选择 Solidity 和 Move 都是用于开发区块链平台智能合约的编程语言。它们具有一些相似之处&#xff0c;但也存在一些关键差异。 相似之处: Solidity 和 Move 都是图灵完备语言&#xff0c;这意味着它们可以表达计算…

提高引流精准性的策略

1、定位清晰&#xff1a;明确你的目标用户是谁&#xff0c;了解他们的需求和兴趣&#xff0c;定制内容和策略以吸引他们。 2、价值输出&#xff1a;提供有价值的内容或服务&#xff0c;让用户觉得添加你的微信是有益的&#xff0c;比如独家资讯、优惠券、专业咨询等。 3、筛选…