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

【银河麒麟操作系统真实案例分享】内存黑洞导致服务器卡死分析全过程

了解更多银河麒麟操作系统全新产品,请点击访问

麒麟软件产品专区:https://product.kylinos.cn

开发者专区:https://developer.kylinos.cn

文档中心:https://documentkylinos.cn


现象描述

机房显示器连接服务器后黑屏,重启服务器后,系统正常运行。

现象分析

sa日志分析

查看问题时间点前后的sa日志,发现在凌晨、,系统可用内存已降至0,memused为100G+,但cached只有1G,active+inactive也只有33.4G。

这样来看问题时间点服务器可以ping通但无法连接的原因为系统内存耗尽,free只剩下7G内存,在min_free_kbytes为6534528的情况下,考虑到DMA/DMA32区域的预留内存后,系统已无法为用户态进程分配内存,available因此显示为0。但同时我们发现一个异常的地方,问题时间点available为0主要是memused占据了大量内存,但系统的active+inactive之和与memused的对比却十分悬殊,有大量内存被使用却未被统计监控到。

为此我们翻看了前几天的sa日志监控情况,发现问题出现在28号下午。查看28号的sa日志,可以看到28号上午时系统内存使用十分平稳各项内存统计指标都没有较大变化,free和available也一直保持在60G以上。

但到了28号下午的15:00后情况发生了变化,可以看到从这时起系统的free和available不断减少,空闲内存减少说明内存被缓存、进程亦或是内核所使用,但我们观察cached、anonpg、slab、pgtbl等参数基本都没变化,同时used却又不断增加了。

系统可用内存free不断减少,used上升,但各项统计数据却显示各个内存监控指标没有发生变动,这一般就说我们所说的内存黑洞或者幽灵内存问题。

内存黑洞问题介绍

追踪Linux系统的内存使用一直是个难题,人们试着把能想到的各种内存消耗都加在一起,kernel text、kernel modules、buffer、cache、slab、page table、process RSS…等等,却总是与物理内存的大小对不上,这是因为Linux kernel并没有滴水不漏地统计所有的内存分配,kernel动态分配的内存中就有一部分没有计入/proc/meminfo中。

Kernel的动态内存分配通过以下几种接口:

  1. alloc_pages/__get_free_page: 以页为单位分配
  2. vmalloc: 以字节为单位分配虚拟地址连续的内存块
  3. slab allocator:kmalloc以字节为单位分配物理地址连续的内存块,它是以slab为基础的,使用slab层的general caches — 大小为2^n,名称是kmalloc-32、kmalloc-64等(在老kernel上的名称是size-32、size-64等)。

通过slab层分配的内存会被精确统计,可以参见/proc/meminfo中的slab/SReclaimable/SUnreclaim;通过vmalloc分配的内存也有统计,参见/proc/meminfo中的VmallocUsed 和 /proc/vmallocinfo;而通过alloc_pages分配的内存不会自动统计,除非调用alloc_pages的内核模块或驱动程序主动进行统计,否则我们只能看到free memory减少了,但从/proc/meminfo中看不出它们具体用到哪里去了,这就是所谓的内存黑洞。

对于内存黑洞,由于我们无法直接统计它的占用情况,只能从meminfo的信息反推,通常我们围绕LRU进行统计:MemTotal = MemFree +【Slab+ VmallocUsed + PageTables + KernelStack + HardwareCorrupted + Bounce + X】+【Active + Inactive + Unevictable + (HugePages_Total * Hugepagesize)】,这里的X就是黑洞内存。

最后黑洞内存问题由于看不到具体申请者,通常只能根据经验来进行问题排查,目前主要的问题原因有:

  1. 各类内核驱动、安全插件、硬件驱动等通过alloc_pages申请内存导致内存被占用却无法看到被谁使用。这类情况我们此前遇到过虚拟化环境的balloon驱动、hns3网卡驱动等。
  2. socket或者pf_packet socket 收发包队列积压,大量内存被用于socket缓冲区数据包存储,导致系统内存被占用。

总结

通过查看收集的sosreport文件中各项日志文件,能够确定29号凌晨发生的服务器宕机问题是由于系统内存不足,无法为用户态进程分配内存导致。而引起内存不足的原因为从28号下午3点开始出现了异常内存黑洞占用。

由于当前机器没有部署相关内存监控内容,其内存黑洞问题难以在后续环境排查,无法分析造成该问题的原因。建议排查28号下午在问题机器上进行的相关操作,并在之后部署相关内存监控脚本,同时对服务器available内存值进行监控,当发现有available内存值连续降低时及时查看机器状态。

后续机器又多次出现异常宕机,但vmcore要不没有生成,要不生成的无内容。结合上述问题怀疑是硬件存在问题,硬件上面检查发现主板供电存在问题,硬件日志中出现低电压报警。

相关文章:

【银河麒麟操作系统真实案例分享】内存黑洞导致服务器卡死分析全过程

了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer.kylinos.cn 文档中心:https://documentkylinos.cn 现象描述 机房显示器连接服务器后黑屏&#xff…...

如何加强游戏安全,防止定制外挂影响游戏公平性

在现如今的游戏环境中,外挂始终是一个困扰玩家和开发者的问题。尤其是定制挂(Customized Cheats),它不仅复杂且隐蔽,更能针对性地绕过传统的反作弊系统,对游戏安全带来极大威胁。定制挂通常是根据玩家的需求…...

SpringBoot整合knife4j,以及会遇到的一些bug

这篇文章主要讲解了“Spring Boot集成接口管理工具Knife4j怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring Boot集成接口管理工具Knife4j怎么用”吧! 一…...

城电科技|光伏廊道是什么?安装光伏廊道有什么好处?

光伏廊道是什么?光伏廊道专门设计用于集中安装太阳能光伏发电系统的建筑物或构筑物,它可以将光伏转换成可以用于供电的清洁绿电。光伏廊道通常由阳能电池板、太阳能电池、控制器、逆变器、混凝土、钢材等材料组成,具备发电、坚固、耐用、防水…...

当DHCP服务器分配了同一个IP地址

当DHCP服务器分配了同一个IP地址给多个设备时,这通常会导致网络问题,如IP地址冲突,进而影响设备的网络连接。以下是详细的分析和解决步骤: 原因分析: IP地址租约未过期: 租约管理:DHCP服务器维…...

储能能量自动化调配装置功能介绍

随着可再生能源的快速发展,光伏发电已成为全球能源结构转型的关键技术之一。与此同时,储能技术作为实现光伏发电稳定输出的核心技术,得到了广泛关注。在企业电网中,光伏储能系统的运维管理不仅关乎能源利用效率,还涉及…...

vite5+vue3+Ts5 开源图片预览器上线

images-viewer-vue3&#xff1a;一款Vue3的轻量级图像查看器&#xff0c;它基于Flip动画技术&#xff0c;支持PC和h5移动网页预览照片&#xff0c;如果它是Vue3开发的产品。 npm开源地址:https://www.npmjs.com/package/images-viewer-vue3?activeTabreadme Flip 动画 < …...

【深度学习】深入解析长短期记忆网络(LSTMs)

长短期记忆网络&#xff08;Long Short-Term Memory networks, LSTMs&#xff09;是一种特殊的递归神经网络&#xff08;RNN&#xff09;&#xff0c;专门设计用来解决标准 RNN 在处理长序列数据时的梯度消失和梯度爆炸问题。LSTMs 在许多序列数据任务中表现出色&#xff0c;如…...

从Web3到智能合约:探索新一代数据交互模式

随着互联网技术的不断演进&#xff0c;Web3的到来标志着互联网的一个新纪元。与传统的Web2相比&#xff0c;Web3倡导去中心化、更加开放和透明的网络架构&#xff0c;而智能合约则是其中的核心技术之一。本文将介绍Web3与智能合约的概念、应用以及它们如何改变数据交互模式&…...

排查bug的通用思路

⭐️前言⭐️ APP点击某个按钮没有反应/PC端执行某个操作后&#xff0c;响应较慢&#xff0c;通用的问题排查方法: 从多个角度来排查问题 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f349;博主将持续更新学习记录收获&#xff0c;友友们有任何问题可以在评…...

如何利用Python爬虫获得商品类目

在当今数字化时代&#xff0c;获取和分析数据的能力对于任何希望在市场上保持竞争力的企业来说都是至关重要的。对于电子商务平台和市场研究公司而言&#xff0c;获取商品类目数据尤为重要&#xff0c;因为这些数据可以帮助他们更好地理解市场趋势、优化产品目录并制定有效的营…...

如何通过 Windows 自带的启动管理功能优化电脑启动程序

在日常使用电脑的过程中&#xff0c;您可能注意到开机后某些程序会自动运行。这些程序被称为“自启动”或“启动项”&#xff0c;它们可以在系统启动时自动加载并开始运行&#xff0c;有时甚至在后台默默工作。虽然一些启动项可能是必要的&#xff08;如杀毒软件&#xff09;&a…...

大模型学习有什么发展前景?

前景人工智能大模型是指拥有超大规模参数&#xff08;通常在十亿个以上&#xff09;、复杂计算结构的机器学习模型。它通常能够处理海量数据&#xff0c;完成各种复杂任务&#xff0c;如自然语言处理、图像识别等。 2024年政府工作报告提出“发展新质生产力”&#xff0c;并将…...

Excel技巧:如何批量调整excel表格中的图片?

插入到excel表格中的图片大小不一&#xff0c;如何做到每张图片都完美的与单元格大小相同&#xff1f;并且能够根据单元格来改变大小&#xff1f;今天分享&#xff0c;excel表格里的图片如何批量调整大小。 方法如下&#xff1a; 点击表格中的一个图片&#xff0c;然后按住Ct…...

独著与编著的区别是?

独著和编著主要有以下区别&#xff1a; 一、创作性质 - 独著 - 独著是作者完全独立进行创作的作品。其内容是作者自己的研究成果、观点见解或者经验总结。作者从最初的选题构思&#xff0c;到资料收集、分析研究&#xff0c;再到内容撰写、修改润色等全过程都是独立完成的。…...

vue中pdf.js的使用,包括pdf显示,跳转指定页面,高亮关键词

目录 一、下载pdf.js 二、引入到本地的项目中 三、实现预览pdf 四、跳转到指定页面 五、利用pdf里面的find查找关键词 六、修改页面大小为实际大小 一、下载pdf.js https://github.com/mozilla/pdf.js 里面有很多的版本&#xff0c; 高版本的可能浏览器不兼容或者还要考…...

【Spring Boot】自动装配机制详解

1. 传统的 Spring 注入方式&#xff08;基于 XML 配置&#xff09; 在传统的 Spring 中&#xff0c;依赖注入&#xff08;DI&#xff09;通常通过 XML 配置文件来进行管理。常见的方式有两种&#xff1a; 通过 <property> 元素进行属性注入&#xff1a; <bean id&qu…...

Flink集群搭建整合Yarn运行

Flink 集群 1. 服务器规划 服务器h1、h4、h5 2. StandAlone 模式&#xff08;不推荐&#xff09; 2.1 会话模式 在h1操作 #1、解压 tar -zxvf flink-1.19.1-bin-scala_2.12.tgz -C /app/#2、修改配置文件 cd /app/flink-1.19.1/conf vim conf.yaml ##内容&#xff1a;## j…...

Linux Ubuntu 安装配置RabbitMQ,springboot使用RabbitMQ

rabbit-Ubuntu 一篇文章学会RabbitMQ 在Ubuntu上查看RabbitMQ状态可以通过多种方式进行&#xff0c;包括使用命令行工具和Web管理界面。以下是一些常用的方法&#xff1a; 1-使用systemctl命令&#xff1a; sudo systemctl start rabbitmq-server sudo systemctl status ra…...

云数据库 MongoDB

MongoDB 是一个基于文档的 NoSQL 数据库&#xff0c;它与传统的关系型数据库不同&#xff0c;采用的是灵活的文档结构&#xff08;类似 JSON 格式&#xff09;。MongoDB 是开源的&#xff0c;且高度可扩展&#xff0c;通常用于处理大量的非结构化或半结构化数据。 云数据库 Mon…...

Ionic 8.4 简介

Ionic 是一个用于开发混合移动应用、渐进式Web应用&#xff08;PWA&#xff09;以及桌面应用的开源框架。它结合了 Angular、React 或 Vue.js 等现代前端框架与 Cordova/PhoneGap 的力量&#xff0c;允许开发者使用 Web 技术&#xff08;HTML, CSS, JavaScript&#xff09;构建…...

蓝桥杯系列---class1

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 我们今天会再开一个系列&#xff0c;那就是蓝桥杯系列&#xff0c;我们会从最基础的开始讲起&#xff0c;大家想要备战明年蓝桥杯的&#xff0c;让我们一起加油。 工具安装 DevC…...

vue3+elementPlus封装的一体表格

目录结构 源码 exportOptions.js export default reactive([{label: 导出本页,key: 1,},{label: 导出全部,key: 2,}, ])index.vue <template><div class"flex flex-justify-between flex-items-end"><div><el-button-group><slot name…...

Junit5 单元测试入门

基础知识 常用注解含义 Test&#xff1a;标记一个方法为测试方法BeforeEach&#xff1a;标记的方法会在每个测试方法执行前执行AfterEach&#xff1a;标记的方法会在每个测试方法执行后执行BeforeAll&#xff1a;标记的方法会在所有测试方法执行前执行一次AfterAll&#xff1…...

数字信号处理-数学基础

来源哪都有&#xff0c;个人复习使用 一 积分 常用积分公式&#xff1a; 基本积分方法 凑微分法(也称第一换元法)&#xff1a; 换元&#xff1a; 分部积分&#xff1a; 卷积 这里有动图解释&#xff1a; https://mathworld.wolfram.com/Convolution.html 欧拉公式 e i x…...

【Exp】# Microsoft Visual C++ Redistributable 各版本下载地址

Microsoft官方页面 https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads Redistributable 2019 X86: https://aka.ms/vs/16/release/VC_redist.x86.exe X64: https://aka.ms/vs/16/release/VC_redist.x64.exe Redistributable 201…...

Hive 分桶表的创建与填充操作详解

Hive 分桶表的创建与填充操作详解 在 Hive 数据处理中&#xff0c;分桶表是一个极具实用价值的功能&#xff0c;它相较于非分桶表能够实现更高效的采样&#xff0c;并且后续还可能支持诸如 Map 端连接等节省时间的操作。不过&#xff0c;值得注意的是&#xff0c;在向表写入数…...

[小白系列]Ubuntu安装教程-安装prometheus和Grafana

Docker安装prometheus 拉取镜像 docker pull prom/prometheus 配置文件prometheus.yml 在/data/prometheus/建立prometheus.yml配置文件。&#xff08;/data/prometheus/可根据自己需要调整&#xff09; global:scrape_interval: 15s # By default, scrape targets ev…...

Flask使用长连接

Flask使用flask_socketio实现websocket Python中的单例模式 在HTTP通信中&#xff0c;连接复用&#xff08;Connection Reuse&#xff09;是一个重要的概念&#xff0c;它允许客户端和服务器在同一个TCP连接上发送和接收多个HTTP请求/响应&#xff0c;而不是为每个新的请求/响…...

数据分析思维案例:游戏评分低,怎么办?

【面试题】 某款手游在应用市场评分相比同类型游戏处于劣势。 请分析可能的原因并给出相关建议。 【分析思路】 一、明确问题 1. 明确业务指标 定义&#xff1a;应用市场评分一般指某一应用在某个应用市场上线以来的总体平均评分。 除“总体平均评分”以外&#xff0c;部分应用…...