当前位置: 首页 > news >正文

【银河麒麟】高可用触发服务器异常重启,处理机制详解

1.服务器环境以及配置

【机型】物理机

处理器:

Intel

内存:

126G

【内核版本】

4.19.90-25.16.v2101.ky10.x86_64

【银河麒麟操作系统镜像版本】

Kylin-Server-10-SP2-Release-Shenzhen-Metro-x86-Build01-20220619

Kylin-HA-10-SP2-Release-Shenzhen-Metro-Build01-20220620-x86_64

【第三方软件】

传统售票业务软件、互联网售票业务软件,k8s

2.问题现象描述

近期站点存在站点频繁重启问题,分析查看日志,查看高可用心跳link频繁存在up \down问题,触发fence导致重启。临时调整了token值,但是目前效果不明显,软件厂家表示各厂家占用内存不高,不是导致oom问题的原因。

3.问题分析

通过收集的2套,近期出现过HA集群服务器被fence的系统sosreport日志,可知,主机ZP1403SV01在2024.04.10 09:35:37和主机ZP1417SV02在2024.04.01 11:40:39左右,被fence,发生过系统重启。如图1和图2:

图1

图2

   分析主机ZP1417SV02系统日志,可知,系统在2024.04.01 11:40:39左右,系统被fence重启之前,有检测到corosync检测心跳状态服务,有4秒超时响应的日志信息输出,“Token has not been received in 4634 ms”,如图3:

图3

进一步分析主机ZP1417SV02系统日志,可以看到,在corosync服务报出检测心跳超时的同时,也有很多k8s服务相关进程被oom-killer的日志信息输出,报出的堆栈信息基本一致。分析其中一个,堆栈报错。可知,elastic-operato进程,在申请内存的时候,显示内核进入到mem_cgroup_out_of_memory这个路径后,分配不到内存,导致oom产生选择elastic-operato进程kill掉,如图4和图5:

图4

图5

由此oom-killer报错信息,联想到,有一个已知系统内核bug,对于银河麒麟操作系统V10 SP1/SP2低版本内核内存水位线计算不准确,会频繁OOM这一问题。

进一步,分别查看分析,4台系统节点的Zone Normal的内存水位线。查看/proc/zoneinfo,发现这4台主机节点ZP1403SV01、ZP1403SV02、ZP1417SV01和ZP1417SV02,Node 0和Node1,zone Movable显示不正常,spanned ,present为0,但是managed 很大。正常应spanned=present=managed=0,或者spanned>present>managed。如图6至图9:

图6 ZP1403SV01

图7 ZP1403SV02

图8 ZP1417SV01

图9 ZP1417SV02

对于银河麒麟V10 SP1/SP2低版本内核内存水位线计算不准确,会频繁OOM这一问题,为已知bug。该bug是由于openeuler内核(麒麟内核基于openeuler内核开发)在优化内存时引入了一个bug(commit eb761d6521c32c006a4987260394a61c6684fb35: mm: parallelize deferred struct page initialization within each node),其会导致内存zone的managed_pages统计出现错位。

目前麒麟软件及openeuler都已在官网发布了内核修复公告,麒麟内核在SP1 23.30、SP2 25.22版本得到修复,SP3内核不存在这个BUG。

公告链接地址:KYBA-202212-1011 - 国产操作系统、麒麟操作系统——麒麟软件官方网站

4.此内核bug的分析说明

1)内核bug对水位线计算错误的原理以及是否影响所有内存区

本次BUG引发的原因是内核代码引入了不严谨的代码,在计算zone中管理的page的数量可能出现错位。

打个比方系统有3个zone,其管page数量分别如下:

1号zone 10个,page 2号zone是100个,page 3号zone是100000个page。而系统在计算水位是依据各个zone的page数量来计算, page数量越多,水位越高,如果page数据统计错误,比如3号zone的page数量算成了100,将导致3号zone的水位严重偏低 。

接着我们从问题patch代码的出错行来看看问题发生的原因: 

 WARN_ON(++zid < MAX_NR_ZONES && populated_zone(++zone)); VM_BUG_ON(nr_init != nr_free); zone->managed_pages += nr_free;

问题代码如上所示,这里本意是要统计zone中managed_pages的数量,将其加上nr_free,但是前面的WARN_ON(++zid < MAX_NR_ZONES && populated_zone(++zone));有可能将zone进行自加,将要统计的nr_free统计到下一个zone上面去了, 比如要统计的1号zone上面的,结果++zone后变成2号zone了,出现统计错位,这有可能会影向所有的zone的统计 。

2)水位线计算错误是否必定出现

对于不同机型,不一定必定出现,对于同一机型只要一台出问题,则其它的都有问题。

接着上一节的代码继续说明,产生这种现象的原因如下: 因为要出现统计错位,则必需要运行++zone这个代码才行, WARN_ON(++zid < MAX_NR_ZONES && populated_zone(++zone)); 如果++zid < MAX_NR_ZONES为假,则后面的++zone不会运行,也就不会出现问题,反之则出现问题。

3)高版本内核是否一定能完全解决内存水位计算异常

高版本内核一定能完全解决这个内存水位计算异常问题,因为这个bug非常明确,如上所说,只需把++zone这个操作放在zone->manage_pages += nr_free后面即可。

当前内核修改完成的代码如下:

zone->managed_pages += nr_free; /* Sanity check that the next zone really is unpopulated */

WARN_ON(++zid < MAX_NR_ZONES && populated_zone(++zone)); //++zone后,后面的代码没有出现引用

zone pr_info("node %d initialised, %lu pages in %ums\n", nid, nr_free, jiffies_to_msecs(jiffies - start)); pgdat_init_report_one_done(); return 0; } 

4)managed不为0,spanned,present都为0与bug的关系

这个问题出现的原因也是如第一条问题的答复,内核在统计zone中managed_pages的数量时可能会出现zone进行自加,将要统计的nr_free统计到下一个zone上面。

而Linux系统并非所有node、zone都管理着内存,比如通常zone Movable、zone Device默认都不管理内存;一些开启了numa的机器在非node 0的节点上可能也只有一个zone管理着内存。这是要是触发了上述bug,就会将上一个zone的managed统计到这个spanned presend managed本该都为0的zone上。这时就会产生managed不为0,spanned,present都为0的现象。

5.问题分析结果

结合,之前出现过此问题的现象研发侧的分析情况,可知,空闲内存过小,在业务突然繁忙时大量的page cache会消耗掉free memory,容易导致corosync延迟处理。有可能,会导致心跳检测超时,触发fence。

对于银河麒麟V10 SP1/SP2低版本内核内存水位线计算不准确,会频繁OOM这一问题,会产生的影响有,机器长时间运行后都有概率出现,内存水位太低,长时间运行后碎片化严重,机器使用久了,所有申请大块内存的都会有问题。导致正常的内存申请,都有问题,从而可能会影响HA集群心跳监控服务corosync服务,延迟处理心跳事件,有风险触发fence动作,系统重启。

6.后续计划与建议

建议,升级银河麒麟V10-SP2-x86服务器系统的内核,到4.19.90-25.22.v2101.ky10.x86_64版本及其以上,运行观察一段时间。

外网源内核下载地址:

Index of /NS/V10/V10SP2/os/adv/lic/updates/x86_64/Packages/

相关文章:

【银河麒麟】高可用触发服务器异常重启,处理机制详解

1.服务器环境以及配置 【机型】物理机 处理器&#xff1a; Intel 内存&#xff1a; 126G 【内核版本】 4.19.90-25.16.v2101.ky10.x86_64 【银河麒麟操作系统镜像版本】 Kylin-Server-10-SP2-Release-Shenzhen-Metro-x86-Build01-20220619 Kylin-HA-10-SP2-Release-S…...

性能工具之 JMeter 常用组件介绍(七)

文章目录 一、后置处理器1、Regular Expression Extractor(正则表达式提取器)2、JSON Extractor(JSON表达式提取器)3、Regular Expression Extractor(正则表达式提取器) 二、小结 本文主要介绍JMeter主流后置处理器的功能 一、后置处理器 从上面可以看出后置处理可以插件挺多&a…...

Python学习笔记15:进阶篇(四)文件的读写。

文件操作 学习编程操作中&#xff0c;我觉得文件操作是必不可少的一部分。不管是读书的时候学习的c&#xff0c;c&#xff0c;工作的前学的java&#xff0c;现在学的Python&#xff0c;没学过的php和go&#xff0c;都有文件操作的模块以及库的支持&#xff0c;重要性毫无疑问。…...

角度调制与解调电路

music&#xff01; &#xff08;黄佳庆老师可爱捏&#xff09; 调角 角度调制有较好的抗噪性能。 调相 相位变化的频率变化的微分&#xff0c;频率变化是相位变化的积分 相位的变化率就是频率 调频 调相与调频的关系 大F是输入信号的频率&#xff0c;大Ω是输入信号的角频率 …...

数据分析:微生物组差异丰度方法汇总

欢迎大家关注全网生信学习者系列&#xff1a; WX公zhong号&#xff1a;生信学习者Xiao hong书&#xff1a;生信学习者知hu&#xff1a;生信学习者CDSN&#xff1a;生信学习者2 介绍 微生物数据具有一下的特点&#xff0c;这使得在做差异分析的时候需要考虑到更多的问题&…...

Linux驱动开发(二)--字符设备驱动开发提升 LED驱动开发实验

1、地址映射 在编写驱动之前&#xff0c;需要知道MMU&#xff0c;也就是内存管理单元&#xff0c;在老版本的 Linux 中要求处理器必须有 MMU&#xff0c;但是现在Linux 内核已经支持无 MMU 的处理器了。 MMU的功能如下&#xff1a; 完成虚拟空间到物理空间的映射 内存保护&…...

钡铼BL101网关助力智慧城市路灯远程智能管控

在迈向智慧城市的征途中&#xff0c;基础设施的智能化改造是关键一环&#xff0c;而路灯作为城市脉络的照明灯塔&#xff0c;其智能化升级对于节能减排、提升城市管理效率具有重要意义。钡铼BL101网关&#xff0c;作为Modbus转MQTT的专业桥梁&#xff0c;正以其卓越的性能和广泛…...

如何优雅的使用Github Action服务来将Hexo部署到Github Pages

文章目录 参考文章前提条件1. 初始化Hexo2. 初始化仓库3. 创建Token4. 修改_config.yml5. 配置Github Action工作流6. 推送验证7. 配置Github Pages8. 修改Hexo主题样式10. 添加文章遇到了一些问题和方案1. 网站没有样式问题2. 图片不显示 参考文章 Bilibili视频教程-9分钟零成…...

After Effects 2024 mac/win版:创意视效,梦想起航

After Effects 2024是一款引领视效革命的专业软件&#xff0c;汇聚了创意与技术的精华。作为Adobe推出的全新版本&#xff0c;它以其强大的视频处理和动画创作能力&#xff0c;成为从事设计和视频特技的机构&#xff0c;如电视台、动画制作公司、个人后期制作工作室以及多媒体工…...

信息打点web篇----web后端源码专项收集

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 专栏描述&#xff1a;因为第一遍过信息收集的时候&#xff0c;没怎么把收集做回事 导致后来在实战中&#xff0c;遭遇资产获取少&#xff0c;可渗透点少的痛苦&#xff0c;如今决定 从头来过&#xff0c;全面全方位…...

ArcGIS批量投影转换的妙用(地理坐标系转换为平面坐标系)

​ 点击下方全系列课程学习 点击学习—>ArcGIS全系列实战视频教程——9个单一课程组合系列直播回放 这次文章我们来介绍一下&#xff0c;如何巧妙用要素数据集来实现要素的批量投影。不需要ArcGIS的模型构建器与解决。 例如&#xff0c;有多个要素要将CGCS_2000地理坐标系投…...

YOLOv10训练自己的数据集(图像目标检测)

目录 1、下载代码 2、环境配置 3、准备数据集 4、yolov10训练 可能会出现报错&#xff1a; 1、下载代码 源码地址&#xff1a;https://github.com/THU-MIG/yolov10 2、环境配置 打开源代码&#xff0c;在Terminal中&#xff0c;使用conda 创建虚拟环境配置 命令如下&a…...

解决不能拉取 docker 镜像

# 编辑镜像仓库文件 sudo vi /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com","https://s3d6l2fh.mirror.aliyuncs.com"] }# 重启docker sudo systemctl restart docker参考 https://blog.csdn.net/u01019733…...

44、基于深度学习的癌症检测(matlab)

1、基于深度学习的癌症检测原理及流程 基于深度学习的癌症检测是利用深度学习算法对医学影像数据进行分析和诊断&#xff0c;以帮助医生准确地检测癌症病变。其原理和流程主要包括以下几个步骤&#xff1a; 数据采集&#xff1a;首先需要收集包括X光片、CT扫描、MRI等医学影像…...

Vue3 【仿 react 的 hook】封装 useTitle

效果预览 页码加载时&#xff0c;自动获取网页标题通过input输入框&#xff0c;可以实时改变网页标题 代码实现 index.vue <template><h1>网页的标题为&#xff1a; {{ titleRef }}</h1><p>通过input输入框实时改变网页的标题 <input v-model"…...

CSS 计数器

CSS 计数器 CSS 计数器是 CSS 中一个强大但经常被忽视的功能。它们允许开发者创建和管理计数器,这些计数器可以在文档中自动递增,非常适合用于编号章节、列表项或其他文档元素。在本文中,我们将深入探讨 CSS 计数器的使用方法、优势和实际应用场景。 CSS 计数器的基本概念…...

磁力搜索器,解读新一代的搜索引擎方式,磁力王、磁力猫等引擎的异同及原理

最近国内几年&#xff0c;不依赖追踪服务器的磁力搜索开始流行&#xff0c;成为新的资源搜索的方式。 我们平常所说的磁力王&#xff08;jigecili.com)、磁力猫(yinghuacili.com)、bt磁力&#xff08;btcili.cn)、磁力狗最新版&#xff08;cilizhai.net)、磁力兔子、磁力宝、人…...

Apache Doris 全新分区策略 Auto Partition 应用场景与功能详解 | Deep Dive系列

编辑&#xff1a;SelectDB 技术团队 在当今数据驱动的时代&#xff0c;如何高效、有序地管理数据库中的海量数据成为挑战。为了处理庞大的数据集&#xff0c;分布式数据库引入了类似分区和分桶策略&#xff0c;通过将数据按特定规则划分成较小的单位并分布到不同节点上&#x…...

【Linux】关于在华为云中开放了端口后仍然无法访问的问题

已在安全组中添加规则: 通过指令: netstat -nltp | head -2 && netstat -nltp | grep 8080 运行结果: 可以看到服务器确实处于监听状态了. 通过指令 telnet 公网ip port 也提示: "正在连接xxx.xx.xx.xxx...无法打开到主机的连接。 在端口 8080: 连接失败"…...

Linux系统ubuntu20.04 无人机PX4 开发环境搭建(失败率很低)

Linux系统ubuntu20.04 无人机PX4 开发环境搭建 PX4固件下载开发环境搭建MAVROS安装安装地面站QGC PX4固件下载 PX4的源码处于GitHub&#xff0c;因为众所周知的原因git clone经常失败&#xff0c;此处从Gitee获取PX4源码和依赖模块。 git clone https://gitee.com/voima/PX4-…...

中间件(express)

中间件&#xff08;express&#xff09; 在Express.js中&#xff0c;中间件&#xff08;Middleware&#xff09;是一个重要的组成部分&#xff0c;用于处理HTTP请求和响应。中间件函数具有特定的签名&#xff0c;并可以接受请求对象&#xff08;req&#xff09;、响应对象&…...

【代码随想录算法训练Day44】LeetCode 322.零钱兑换、LeetCode 279.完全平方数、LeetCode139.单词拆分

Day44 动态规划第六天 LeetCode 322.零钱兑换 dp数组的含义&#xff1a;装满容量为j的背包需要的最少物品数为dp[j] 递推公式&#xff1a;dp[j]min(dp[j-coins[i]]1,dp[j]) 初始化&#xff1a;dp[0]0,dp[j]INT_MAX 遍历顺序&#xff1a;个数问题与遍历顺序无关&#xff0c;都…...

ChatGLM2-6B 部署

本文主要对 ChatGLM2-6B 模型的部署和推理过程进行介绍。 一、部署环境 在阿里云服务器上部署&#xff0c;具体环境如下&#xff1a; modelscope:1.9.5 pytorch 2.0.1 tensorflow 2.13.0 python 3.8 cuda 118 ubuntu 20.04 CPU 8 core 内存 30 GiB GPU NVIDIA A10 2…...

武汉工程大学24计算机考研数据,有学硕招收调剂,而专硕不招收调剂!

武汉工程大学是一所以工为主&#xff0c;覆盖工、理、管、经、文、法、艺术、医学、教育学等九大学科门类的多科性教学研究型大学&#xff0c;是湖北省重点建设高校、湖北省国内一流学科建设高校&#xff0c;入选卓越工程师教育培养计划、中西部高校基础能力建设工程、“新工科…...

python爬虫之selenium自动化操作

python爬虫之selenium自动化操作 需求&#xff1a;操作淘宝去掉弹窗广告搜索物品后进入百度回退又前进 selenium模块的基本使用 问题&#xff1a;selenium模块和爬虫之间具有怎样的关联? 1、便捷的获取网站中动态加载的数据 2、便捷实现模拟登录 什么是selenium模块&#x…...

【漏洞复现】红帆iOffice.net wssRtSyn接口处存在SQL注入

【产品&&漏洞简述】 红帆iOffice.net从最早满足医院行政办公需求&#xff08;传统OA&#xff09;&#xff0c;到目前融合了卫生主管部门的管理规范和众多行业特色应用&#xff0c;是目前唯一定位于解决医院综合业务管理的软件&#xff0c;是最符合医院行业特点的医院综…...

云计算【第一阶段(17)】账号和权限管理

目录 一、用户账号和组账号概述 1.1、用户账号的三种角色 1.2、组账号的两个角色 二、用户账号文件 2.1、/etc/passwd 2.2、/etc/shadow 2.3、chage 命令 三、组账号文件 3.1、/etc/group 3.2、/etc/gshadow 四、添加组账户 4.1、添加删除组成员 4.2、删除组账号 …...

环境配置02:CUDA安装

1. CUDA安装 Nvidia官网下载对应版本CUDA Toolkit CUDA Toolkit 12.1 Downloads | NVIDIA Developer CUDA Toolkit 12.5 Downloads | NVIDIA Developer 安装配置步骤参考&#xff1a;配置显卡cuda与配置pytorch - 知乎 (zhihu.com) 2. 根据CUDA版本&#xff0c;安装cudnn …...

Ranger配置图片及json文件预览

文章目录 前言下载apt下载pip下载 配置使用json文件预览方法一 修改scope用cat预览方法二 安装jq预览配置ranger 图片文件预览方法一 使用img2txt预览方法二 使用fim预览配置ranger 总结 前言 本文主要讲解Ranger12如何配置json及图片的预览设置&#xff0c;如下是ranger的介绍…...

C语言 | Leetcode C语言题解之第169题多数元素

题目&#xff1a; 题解&#xff1a; int majorityElement(int* nums, int numsSize) {int ans 0;for (int i 0, cnts 0; i < numsSize; i) {if (nums[i] ans) {cnts;} else if (cnts 0) {ans nums[i];} else {cnts--;}}return ans; }...

月季花app是哪家公司开发的/宁波seo网络推广代理公司

在众多的网络推广方式中&#xff0c;软文以可读性强、流通性广、效果持久等特点广受追捧。互联网新闻软文推广易操作&#xff0c;效果好&#xff0c;很多企业家们都希望能够通过软文推广的方式把品牌推广出去&#xff0c;不过很多企业并不了解软文推广&#xff0c;尤其是新闻软…...

电子商务网站建设前的分析/免费域名申请个人网站

看到GOOGLE的搜索&#xff0c;这个世界很正常&#xff01;原来GOOGLE也可以搜索人心的&#xff01; 根据Google的搜索结果&#xff0c;最近我们发现大约有30万人“极度害怕中国人”。于是我们打算对人们大脑中的东西做更多的挖掘&#xff0c;在美国版Google的帮助下&#xff0c…...

苏州公司做网站/电商平台app大全

1、 溢出漏洞就像杯子里装水,水多了杯子装不进去,就会把里面的水溢出来.而相对计算机来说计算机有个地方叫缓存区,程序的缓存区长度是被事先设定好的,如果用户输入的数据超过了这个缓存区的长度,那么这个程序就会溢出了.缓存区溢出漏洞主要是由于许多软件没有对缓存区检查而造成…...

南京建设银行网站首页/友链交换网站

第4章 并发编程 4.5 channel select Go语言直接在语言级别支持select关键字&#xff0c;用于处理异步IO问题。 随机是怎么做到的&#xff1f;因为select的特点是只要其中一个case已经完成&#xff0c;程序就会继续往下执行&#xff0c;而不会考虑其他case的情况。 缓冲机制 c…...

西安品牌策划/无锡优化网站排名

方法一 telnet法 telnet为用户提供了在本地计算机上完成远程主机工作的能力 用法格式 telnet ip port说明: ip:是测试主机的ip地址port:是端口,比如80如果telnet连接不存在的端口,那会如下图所示。 如果telnet 连接存在端口会出现如下图所示的内容,下图中以80端口为例。 方…...

想学网站制作/小程序制作费用一览表

一、Array数组对象1、Array对象&#xff1a;使用单独的变量名来存储一系列的值。2、数组的创建&#xff1a;例&#xff1a;var myArray["Hello","yeleven","yeleven2"];3、数组的访问&#xff1a;通过指定数组名以及索引号码&#xff0c;你可以访…...