【问题实操】银河高级服务器操作系统实例分享,配置hugepages启动异常

1.问题现象

某运营商国产服务器操作系统项目,部署Kylin-Server-0524-aarch64服务器系统,内核从4.19.90-24.4升级到4.19.90-25.14。在grub中配置huagepages大页内存后,系统在内核启动阶段黑屏,只显示一个光标。grub配置如下图:

黑屏状态如下图:

2.问题分析

1.重启系统,在grub里面添加启动参数:console=tty0 loglevel=7 systemd.log_level=debug调高日志级别后,看到系统启动后卡住的时候报错:systemd-journald[1693]:Failed to open runtime journal:No space left on device,由于journald 生成的日志文件默认不是持久的,日志文件只存储在内存或/run/log/journal/目录中的一个小环形缓冲区中,可知,系统是由于内存不够,没法启动。提示信息如下图:

2.于是将grub里面设置的819个大页改为600个大页,也就是将default_hugepagesz=512M hugepagesz=512M hugepages=819改为default_hugepagesz=512M hugepagesz=512M hugepages=600,改完后可以正常进入系统,从而可以进一步确定系统启动不了的原因是由于内存不够引起的。

3.查看系统所保留空闲内存的最低限,sysctl -a | grep min_free_kbytes,发现min_free_kbytes的值为25G,如下图:

为了保证客户现场在hugepages=819的情况下能够正常进系统,我们将min_free_kbytes系统所保留空闲内存的最低限从25G调整为了128M,改完后如下图:

此时在hugepages=819的情况下,能够正常进入系统。

4.进入系统后,发现系统在没有启动任何业务系统的情况下(ps aux 也没有看到内存占用高的进程),内存使用了479G,而hugepages配置的只有409.5G,也就是说有大约70G的内存不知道是被什么进程占用的,free命令结果如下图:

ps aux没有发现内存占用高的进程,如下图:

5.重启系统,在grub界面继续增加启动参数:systemd.unit=emergence.target,让系统进入紧急模式,如下图:

在紧急模式中通过free查看内存占用,发现used为411G,由此怀疑是加载了某系驱动或者某些服务引起的问题。优先考虑到和磁盘缓存队列以及网卡缓存队列。

尝试在emergency模式中将正常系统启动后的驱动模块加载上来以及将正常系统的服务启动,发现当NetworkManager成功启动后,内存上升到了476G,由此可知该问题和NetworkManager服务强相关。

6.对比以4.19.90-24.4内核启动的系统以及以4.19.90-25.14内核启动的系统分别的ip信息,发现4.19.90-25.14的内核要比4.19.90-24.4的内核多识别了四张网卡:ens2f0、ens2f1、enP1s5f0、enP1s5f1。

4.19.90-25.14-kernel识别的网卡如下:

4.19.90-25.14-kernel识别的网卡如下:

查看ens2f0、ens2f1、enP1s5f0、enP1s5f1网卡对应的驱动,发现均为:ice,如下图:

所以不难推断,4.19.90-24.4的内核没有成功加载ice驱动,所以少识别了ens2f0、ens2f1、enP1s5f0、enP1s5f1这四张网卡。

7.为了验证第6点,对比启动4.19.90-24.4内核以及启动4.19.90-25.14内核后的lsmod信息,发现4.19.90-24.4内核没有成功加载ice驱动,而4.19.90-25.14内核已经成功加载了ice驱动。

4.19.90-24.4-kernel加载的ice驱动信息如下图:

4.19.90-25.14-kernel加载的ice驱动信息如下图:

于是将4.19.90-25.14内核的系统卸载ice驱动后,发现内存恢复正常。所以可以进一步定位该问题与ice驱动强相关。

8.继续在4.19.90-24.4内核的系统,执行insmod /usr/lib/modules/4.19.90-25.14.v2101.ky10.aarch64/kernel/drivers/net/ethernet/intel/ice/ice.ko.xz(加载4.19.90-25.14的ice驱动),发现ice驱动被成功加载,但是内存却使用正常,由此可知,4.19.90-25.14系统内核默认的ice驱动没有问题。怀疑有问题的时候加载的ice驱动并非系统自带。

9.于是执行find / | grep ice.ko | xargs md5sum,发现在/root/ice-1.5.8/src/目录下有客户自己编译的ice.ko驱动,并且加载到了系统的/usr/lib/modules/4.19.90-25.14.v2101.ky10.aarch64/updates/drivers/net/ethernet/intel/ice/目录下。

10.为了验证现场启动的4.19.90-25.14内核系统使用的是客户自己编译的ice.ko,我们重启系统,选择4.19.90-25.14内核进入系统,执行modinfo ice,发现当前系统使用的驱动版本为1.5.8,正好是现场自己编译的ice驱动,并非系统自带的ice驱动。继续modprobe -r ice卸载驱动,然后insmod 4.19.90-25.14内核自带的驱动,发现内存恢复正常。

11.为了进一步定位现场自己编译的ice驱动为什么会引起used增加,我们发现如下区别:

a.ice版本不一样:现场自己编的是1.5.8,而4.19.90-25.14内核自带的版本是0.7.2-k

b.由于ice版本的不一样,导致了ice驱动对与网卡的ring buffer值设置不一致。现场编译的ice驱动默认设置的网卡rx 为2048,而系统自带的ice驱动默认设置的网卡rx 为128

现场ice-1.5.8版本如下:

麒麟操作系统4.19.90-25.14内核自带的驱动版本如下:

现场ice-1.5.8对网卡默认rx设置如下:

麒麟操作系统4.19.90-25.14内核自带的驱动对网卡默认rx设置如下:

12.在加载现场编译的ice-1.5.8的驱动前提下,我们将网卡的rx队列调小,发现used也跟着变小了。

由此可知,由于ice驱动版本的不一样,导致网卡默认rx队列设置的值也就不一样,而网卡rx队列值调高会占用系统的内存,从而导致了内存的升高。

3.解决方案(结论)

结论:

  1. 现场系统起不来的原因是由于可用内存不够引起的。
  2. 内存不够的主要原因是因为系统加载了现场自己编译的ice驱动,该驱动默认将ens2f0、ens2f1、enP1s5f0、enP1s5f1这四张网卡的rx队列值设置为了2048,从而导致了开机就占用了较高的内存使用。

建议:

  1. 删除现场自己编译的ice驱动,使用麒麟操作系统4.19.90-25.14内核自带的ice驱动。
  2. 调小min_free_kbytes的值。

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

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

相关文章

Vue3框架

Vue3框架 一.使用create-vue搭建Vue3项目二.组合式API - setup选项1.setup选项的写法和执行时机2.setup中写代码的特点3. script setup 语法糖 三.组合式API - reactive和ref函数1. reactive2. ref3. reactive 对比 ref 四.组合式API - computed五.组合式API - watch1. 侦听单个…

Gone框架介绍3 - 使用gone命令,自动生成Priest函数

文章目录 1. 安装辅助工具: gone2. 创建一个名为gen-code的新项目3. 创建Goner4. 使用辅助工具5. 添加main函数 我在两年前实现了一个Golang的依赖注入框架,并且集成了gin、xorm、redis、cron、消息中间件等功能,自己觉得还挺好用的;之前一直…

Unity射击游戏开发教程:(8)构建 UI 元素:添加分数显示

用户界面决定用户如何与屏幕交互。UI 适用于所有类型的游戏和应用程序,在此示例中,我们将为我的太空射击游戏设置一个简单的记分板。 第一步是在层次结构中创建一个 UI 元素。只需在层次结构中右键单击,滚动 UI 并选择要添加的 UI 元素类型。在本例中,我们将使用文本元素。…

使用 Docker 自建一款怀旧游戏之 - 扫雷

1)扫雷 简介 扫雷 是一种经典的单人电脑游戏,最初由微软公司在 1990 年代开发并内置在 Windows 操作系统中。游戏的目标是在一个由方块组成的网格上揭开所有非地雷的方块,而不触发地雷。每个方块上都标有数字,表示周围 8 个方块中…

Java网址url工具类

功能描述 无需引入三方依赖文本匹配网址(支持多个)网址解析(包括协议、主机、路径、参数等) package com.qiangesoft.image.utils;import org.springframework.util.Assert; import org.springframework.util.CollectionUtils;i…

行为学学习记忆实验和抗焦虑实验两款硬件

安徽耀坤XWX-BM八臂迷宫实验(Eight-arm Maze Test,RMT)由八个完全相同的臂组成,这些臂从一个中央平台放射出来,所以又被称为放射迷宫。其基本方式是:训练动物受食物的驱使对迷宫的各臂进行探究,…

xLua背包实践

准备工作 环境,代码 在C#代码方面我们需要准备单例模式基类,AB包管理器,lua解析器管理器 详情请见AB包管理器 xlua详解 然后是Xlua包和AB包,具体导入方法也在上面的链接中 然后是lua的三个文件 具体代码: JsonUtil…

SSH Config 后门 | Linux 后门系列

ssh 客户端配置文件加载顺序 命令行参数 > ~/.ssh/config > /etc/ssh/ssh_config Ubuntu server 16.04 默认 /etc/ssh/ssh_config # Host * # ForwardAgent no # ForwardX11 no # RhostsRSAAuthentication no # RSAAuthentication …

一、OSPF基础

目录 1.路由协议的优先级 2.转发原则:最长匹配原则 3.负载分担 4.路由备份(浮动路由) 5.路由协议的分类 6.动态路由 7.距离矢量路由协议(BGP,RIP) 8.链路状态路由协议(OSPF,I…

SpringBoot配置HTTPS及开发调试

前言 在实际开发过程中,如果后端需要启用https访问,通常项目启动后配置nginx代理再配置https,前端调用时高版本的chrome还会因为证书未信任导致调用失败,通过摸索整理一套开发调试下的https方案,特此分享 后端配置 …

西瓜书学习——决策树形状、熵和决策树的本质

文章目录 决策树形状监督学习算法分类与回归 熵信息熵香农熵 (Shannon Entropy) - H(X)联合熵 (Joint Entropy) - H(X, Y)条件熵 (Conditional Entropy) - H(Y|X)互信息 (Mutual Information) - I(X; Y)相对熵 (Relative Entropy) / KL散度 (Kullback-Leibler Divergence) - DK…

misc学习

一.知识点 1.BMP文件 BMP文件主要有四部分组成,位图头、位图信息、调色板、位图数据。 bmp文件头(bmp file header):提供文件的格式、大小等信息 位图信息头(bitmap information):提供图像数据的尺寸、位平面数、压缩方式、颜色索引等信息…

JAVA顺序表相关习题1

1.笔试题:cvte str1 :welcome to cvte str2:come 描述:删除第一个字符串当中出现的所有的第二个字符串的字符!结果:wlt vt 要求 用ArrayList完成! public class Test {public static List<Character> findSameWords(String u1, String u2){List<Character> listn…

Sora新突破!AI生成电影迈向新阶段,配音版Sora登场!将如何改变影视行业?

Sora之后迎来新突破&#xff01; 配音版Sora来袭&#xff0c;AI生成电影又更近一步&#xff01; 在2024年伊始&#xff0c;人工智能界迎来了一次创新性的突破&#xff0c;由AI语音技术的先锋公司ElevenLabs带头实现。他们最近的成就体现在为OpenAI的Sora视频模型提供了令人动容…

tiktok如何影响用户行为的分析兼论快速数据分析的策略

tiktok如何影响用户行为的分析 快速数据分析的策略流程&#xff1a; 1.确定指标变量&#xff0c;也就确定了数据分析想要回答的问题。想回答不同的问题&#xff0c;就选择不同的指标变量。 变量筛选方法选出指标变量相关的变量&#xff1b; 针对筛选出的变量进行描述性分析和因…

【网站项目】家庭理财系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

金三银四面试题(二十三):装饰器模式知多少?

什么是装饰器模式 装饰器模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许动态地向对象添加新的行为&#xff0c;而无需修改原始对象的结构。通过将对象包装在一个或多个装饰器对象中&#xff0c;装饰器模式可以增强原始对象的功能。 装…

Python俄罗斯方块

文章目录 游戏实现思路1. 游戏元素的定义2. 游戏区域和状态的定义3. 游戏逻辑的实现4. 游戏界面的绘制5. 游戏事件的处理6. 游戏循环7. 完整实现代码 游戏实现思路 这个游戏的实现思路主要分为以下几个步骤&#xff1a; 1. 游戏元素的定义 Brick类&#xff1a;表示游戏中的砖…

SpringCloud学习笔记(三)Nacos配置管理与热更新、Feign远程调用替代RestTemplate

文章目录 前言6 Nacos配置管理6.1 在Nacos中添加配置文件6.2 微服务拉取配置6.3 配置热更新6.3.1 方式一&#xff1a;RefreshScope注解6.3.2 方式二&#xff1a;ConfigurationProperties注解 6.4 配置共享6.4.1 添加一个环境共享配置6.4.2 实现读取共享配置 6.5 配置共享的优先…

Agent AI智能体:未来社会的无形引领者

目录 前言1. 智能体说明1.1 定义1.2 作用1.3 类型介绍1.4 核心技术 2. 技术进步与创新2.1 机器学习的进步2.2 深度学习与神经网络2.3 强化学习2.4 转移学习与多任务学习2.5 自然语言处理(NLP)的革新2.6 知识图谱与推理 3. 行业领域应用场景3.1 游戏行业3.2 医疗健康3.3 金融服务…