【实际案例】服务器宕机情况分析及处理建议
了解银河麒麟操作系统更多全新产品,请点击访问麒麟软件产品专区:https://product.kylinos.cn
服务器环境以及配置
| 物理机 | |
| 外网/私有网络/无网络 | 私有网络 |
| 处理器: | Kunpeng 920 |
| 内存: | 4 TiB |
| BIOS版本: | Huawei Corp. |
| 固件版本: | TaiShan 200 (Model 2280) |
| 具体操作系统版本 | NeoKylin Linux Advanced Server release V7Update6 (Chromium)-aarch64 |
| 内核版本 | 4.14.0-115.5.1.el7a.12.aarch64 |
现象描述
生产环境arm V7.6物理机在2024年 4月7号08:49分钟左右宕机(自动重启恢复),生成vmcore文件。
情况分析
查看vmcore-dmesg日志
查看vmcore-dmesg日志如下所示,可以看到本次服务器系统是因为系统触发了softlockup导致的宕机。
| [8114761.027875] Kernel panic - not syncing: softlockup: hung tasks [8114761.033855] CPU: 11 PID: 5923 Comm: java Kdump: loaded Tainted: G L ------------ 4.14.0-115.5.1.el7a.12.aarch64 #1 [8114761.045536] Hardware name: Huawei TaiShan 200 (Model 2280)/BC82AMDGK, BIOS 1.87 02/22/2022 [8114761.053934] Call trace: [8114761.056544] [<ffff000008089d54>] dump_backtrace+0x0/0x23c [8114761.062092] [<ffff000008089fb4>] show_stack+0x24/0x2c [8114761.067293] [<ffff00000881cd78>] dump_stack+0x84/0xa8 [8114761.072495] [<ffff0000080d49c8>] panic+0x138/0x2a0 [8114761.077438] [<ffff0000081a86d8>] watchdog+0x0/0x38 [8114761.082380] [<ffff00000815868c>] __hrtimer_run_queues+0x14c/0x2cc [8114761.088618] [<ffff000008159070>] hrtimer_interrupt+0xa8/0x1d8 [8114761.094513] [<ffff0000086902d8>] arch_timer_handler_phys+0x3c/0x48 [8114761.100837] [<ffff000008141e74>] handle_percpu_devid_irq+0x98/0x210 [8114761.107248] [<ffff00000813bf6c>] generic_handle_irq+0x34/0x4c [8114761.113139] [<ffff00000813c688>] __handle_domain_irq+0x6c/0xc4 [8114761.119118] [<ffff000008081848>] gic_handle_irq+0xa0/0x1b8 [8114761.124751] Exception stack(0xffff0000a7fcfab0 to 0xffff0000a7fcfbf0) |
正常来说触发软锁并不会导致系统宕机,查看机器内核参数配置,发现是客户手动设置了kernel.softlockup_panic=1导致的。

具体查看softlockup日志,发现触发软锁的的为CPU: 11,其上正在运行的是java进程,该CPU最终在__d_lookup+0x7c/0x184处执行相关操作超过22s没有进行切换而触发了watchdog。__d_lookup+0x7c/0x184函数是iterate_dir的一部分,用于在目录中查找特定的项,在这个阶段系统可能正在尝试打开或遍历一个目录。
| [8114760.616335] watchdog: BUG: soft lockup - CPU#11 stuck for 22s! [java:5923] [8114760.623353] Modules linked in: udp_diag tcp_diag inet_diag bonding sunrpc vfat fat crc32_ce ghash_ce sha2_ce sha256_arm64 sha1_ce ses enclosure sbsa_gwdt hns_roce_hw_v2 hns_roce ib_core ipmi_si sg ipmi_devintf ipmi_msghandler gpio_dwapb gpio_generic ip_tables xfs libcrc32c mlx5_core mlxfw ptp hibmc_drm drm_kms_helper syscopyarea realtek sysfillrect sysimgblt fb_sys_fops ttm hns3 drm hisi_sas_v3_hw hclge pps_core hisi_sas_main devlink hnae3 libsas megaraid_sas scsi_transport_sas i2c_designware_platform i2c_designware_core dm_mirror dm_region_hash dm_log dm_mod [8114760.672838] CPU: 11 PID: 5923 Comm: java Kdump: loaded Not tainted 4.14.0-115.5.1.el7a.12.aarch64 #1 [8114760.682100] Hardware name: Huawei TaiShan 200 (Model 2280)/BC82AMDGK, BIOS 1.87 02/22/2022 [8114760.690499] task: ffffa06f55197600 task.stack: ffff0000a7fc0000 [8114760.696568] PC is at __d_lookup+0x7c/0x184 [8114760.700821] LR is at d_lookup+0x40/0x6c [8114760.704812] pc : [<ffff0000082be270>] lr : [<ffff0000082be3b8>] pstate: 80400009 [8114760.712346] sp : ffff0000a7fcfbf0 [8114760.715818] x29: ffff0000a7fcfbf0 x28: ffffa06f55197600 [8114760.721280] x27: ffffa06f55197600 x26: ffffffffffffffff [8114760.726742] x25: ffff0000a7fcfd10 x24: 0000000000000000 [8114760.732203] x23: ffff806fd22d2040 x22: ffff806fd22d2040 [8114760.737664] x21: 00000000b0c232bc x20: ffffa0423d016d80 [8114760.743125] x19: ffffa0423d016d88 x18: 00000000e3ab91d2 [8114760.748586] x17: 0000ffffa9345dac x16: ffff0000082b7ae8 [8114760.754048] x15: 00000000e3ab9008 x14: 000000008002e388 [8114760.759509] x13: 0000000000000000 x12: 0de59ec22af18900 [8114760.764971] x11: ffff0000a7fcfd40 x10: ffff0000a7fcfd40 [8114760.770433] x9 : 00000000ffffffd8 x8 : 0000000000000000 [8114760.775893] x7 : 0de59ec22af18900 x6 : 0000000000000029 [8114760.781355] x5 : ffffffffffffffff x4 : 0000000000003134 [8114760.786817] x3 : 3e6ec4f4e31ec6bc x2 : 00000000b0c232b7 [8114760.792278] x1 : ffff00000c0d0000 x0 : 0000000005861190 [8114760.797739] Call trace: [8114760.891625] [<ffff0000082be270>] __d_lookup+0x7c/0x184 [8114760.896912] [<ffff0000082be3b8>] d_lookup+0x40/0x6c [8114760.901940] [<ffff0000082be440>] d_hash_and_lookup+0x5c/0x70 [8114760.907746] [<ffff00000831cd08>] proc_fill_cache+0x68/0x194 [8114760.913465] [<ffff000008320dbc>] proc_readfd_common+0x100/0x220 [8114760.919531] [<ffff000008320f0c>] proc_readfd+0x30/0x3c [8114760.924818] [<ffff0000082b73d8>] iterate_dir+0x150/0x1b8 [8114760.930279] [<ffff0000082b7b80>] SyS_getdents64+0x98/0x170 [8114760.935911] Exception stack(0xffff0000a7fcfec0 to 0xffff0000a7fd0000) [8114761.022155] [<ffff00000808392c>] __sys_trace_return+0x0/0x4 |
查看call trace堆栈信息,详细的函数调用流程如下。简单来说问题发生时CPU在处理用户空间对/proc/<pid>/fd目录的遍历请求时(通过getdents64系统调用),在__d_lookup函数中触发了soft lockup。
| SyS_getdents64+0x98/0x170-> #该函数是getdents64系统调用的内核实现,用于获取目录中下一个文件或子目录的详细信息,包括inode、名称等。 iterate_dir+0x150/0x1b8-> #该函数用于遍历目录中的文件和子目录,通常在处理getdents系统调用时被调用,为用户提供目录内容列表。 proc_readfd+0x30/0x3c-> #该函数是用户查询进程文件描述符详细信息的入口,通常调用proc_readfd_common来完成实际的读取操作。 proc_readfd_common+0x100/0x220-> #该函数处理/proc/<pid>/fd目录下特定文件描述符(fd)的信息读取请求。 proc_fill_cache+0x68/0x194-> #该函数与/proc文件系统相关,用于填充getdents系统调用所需的目录项缓存,以提供对/proc目录下文件或子目录的遍历支持。 d_hash_and_lookup+0x5c/0x70-> #该函数负责计算给定路径的哈希值,并使用该哈希值在目录项缓存中查找对应的目录项结构,通常会调用d_lookup完成查找。 d_lookup+0x40/0x6c-> #该函数调用__d_lookup进行实际查找工作,并处理一些额外的锁定和错误处理逻辑。 __d_lookup+0x7c/0x184-> # 该函数负责在目录项缓存(dentry cache)中查找与指定路径对应的目录项结构 |
linux系统中软锁(softlockup)的发生通常是因为某个任务在内核态循环超过一定时间,导致其他任务没有机会得到运行。本处问题场景的堆栈信息为一个典型的文件系统操作流程,最终卡住的位置__d_lookup也是一个常见的目录项查找函数,不太可能是死循环、无限递归等原因导致,更像是性能问题导致的锁竞争。且后续结合sosreport文件,我们可以知道当前服务器CPU为鲲鹏920,java进程也未华为bigdata相关业务进程,猜测可能是该进程遍历目录中存在大量小文件而arm CPU性能相较intel/amd较差导致目录遍历耗时较长触发了软锁。
后续原本还想通过vmcore看能否查看问题触发的时间的相关信息,如遍历的目录及查找的目录项等,但由于客户提供 vmcore(大小57G)为网络下载链接,我们尝试几次下载都没能下载到完整的vmcore文件,无法进一步查看更多信息。
查看sa日志
sar -r -f sa07,查看4月7号问题发生时的内存使用率,内存使用率并不高。

sar -u -f sa07,查看问题发生时的CPU使用率,CPU使用率也不高。

sar -P ALL -f sa07,查看各个CPU的使用率,包括触发软锁的CPU 11在内,每个CPU使用率也并不高,可能是sa采样频率为10分钟的缘故。

sar -q -f sa07,查看系统负载情况,系统负载并不高。

sar -d -f sa08,查看磁盘使用情况,问题发生时各个磁盘读写也不高。

分析总结
综上所述,通过查看vmcore-demsg信息我们发现本次系统宕机的原因为系统触发了softlockup机制。详细来说触发软锁的为CPU: 11,其上正在运行的是java进程,该CPU最终在__d_lookup+0x7c/0x184处执行相关操作超过22s没有进行切换而触发了watchdog。默认情况下softlockup并不会导致宕机,本处是因为客户手动设置了kernel.softlockup_panic=1。
查看问题发生时的系统资源使用情况,可以看到问题发生前系统的CPU/内存/磁盘等资源均不高,说明问题发生前几分钟不存在系统资源耗尽的问题。分析call trace堆栈信息,我们发现问题发生时CPU在处理用户空间对/proc/<pid>/fd目录的遍历请求时(通过getdents64系统调用),在__d_lookup函数中触发了soft lockup。
linux系统中软锁(softlockup)的发生通常是因为某个任务在内核态循环超过一定时间,导致其他任务没有机会得到运行。本处问题场景的堆栈信息为一个典型的文件系统操作流程,看起来像是性能问题导致的锁竞争。且后续结合sosreport文件,我们可以知道当前服务器CPU为鲲鹏920,java进程也为bigdata相关业务进程,猜测可能是该进程遍历目录中存在大量小文件而arm CPU性能相较intel/amd较差导致目录遍历耗时较长触发了软锁。
针对该问题建议应用方排查下相应java进程是否存在对大量小文件的目录进行遍历操作,以及根据实际需求看是否考虑关闭kernel.softlockup_panic。
相关文章:
【实际案例】服务器宕机情况分析及处理建议
了解银河麒麟操作系统更多全新产品,请点击访问麒麟软件产品专区:https://product.kylinos.cn 服务器环境以及配置 物理机/虚拟机/云/容器 物理机 外网/私有网络/无网络 私有网络 处理器: Kunpeng 920 内存: 4 TiB BIOS版…...
Linux系统之ncdu命令的基本使用
Linux系统之ncdu命令的基本使用 一、ncdu命令命令介绍1.1 ncdu简介1.2 ncdu特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本3.3 检查系统镜像源3.4 更新软件列表 四、安装ncdu工具4.1 安装ncdu软件4.2 n…...
STM32L051K8U6-HAL-LED闪烁设计
HAL三步法: 1、配置下载线 2、配置晶振 3、配置时钟 注意:中断优先级(这里防止HAL_Delay卡死,详细请看 http://t.csdnimg.cn/NQhQV) 4、 配置灯引脚属性为输出模式。并设置标签为LED 生成代码:编写while里…...
记一次远程API调用失败
记一次远程API调用失败 最近开发忙,项目紧,系统出现一些忽隐忽现的问题,本地也不能复现,当时也无法理解,就先搁置了,现在回想起来,这里还是明智的。 这个bug很神奇 今天,原本好好的…...
【力扣】746.使用最小花费爬楼梯
题目描述 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯顶部的最低花费。 示例…...
06:【stm32】中断一:NVIC的配置
中断 1、中断的简介1.1、什么是中断1.2、为什么需要中断 2、中断的优先级2.1、中断优先级的表示方法 3、NVIC3.1、什么的NVIC3.2、NVIC的内部结构3.3、中断向量表3.4、程序实现①开启中断源②配置NVIC③中断响应函数 1、中断的简介 1.1、什么是中断 正在进行的事务被突发事件打…...
Flutter简介
Flutter是一个由Google开发的开源移动UI框架,它允许开发者使用Dart语言来构建高性能、高保真的iOS和Android应用。Flutter的设计理念是"编写一次,到处运行"(write once, run everywhere),这意味着开发者可以…...
WT2605C蓝牙语音芯片赋能对讲机新体验:无屏操控、音频解码与蓝牙音箱三合一
一、产品概况 对讲机市场是一个技术成熟且具有广泛应用前景的市场。对讲机作为无线通信设备的一种,在许多不同的领域和业务中发挥着重要作用。从技术发展角度来看,对讲机经历了从模拟到数字的转型,以及从简单通信工具向多功能设备的演进。当…...
ctfshow-web入门-sql注入(web191-web195)
目录 1、web191 2、web192 3、web193 4、web194 5、web195 1、web191 过滤了 ascii 使用 ord 代替: import requests import string url "http://a585c278-320a-40e7-841f-109b1e394caa.challenge.ctf.show/api/index.php" out for j in range(1…...
【ARM】v8架构programmer guide(3)_ARMv8的寄存器
目录 4.ARMv8 registers 4.1 AArch64 特殊寄存器 4.1.1 Zero register 4.1.2 Stack pointer (SP) 4.1.3 Program Counter (PC) 4.1.4 Exception Link Register(ELR) 4.1.5 Saved Process Status Register (SPSR) 4.2 Proc…...
SpringIOC整合dbUtil做的增删改查以及转账业务的实现
目录 一、xml方式实现 1.介绍lombok插件 2.功能 3.步骤 3.1 idea安装插件(只做一次) 3.2 添加坐标 3.3 编写注解 4.核心类 4.1 QueryRunner 4.2 query() 查询 4.3 update() 增删改 5.配置文件applicationContext.xml 6.junit测试 6.1使用步骤 6.1.1 坐标 6.1.2…...
【Nacos无压力源码领读】(二) 集成 LoadBanlancer 与 OpenFeign
上一篇文章中, 详细介绍了 Nacos 注册中心的原理, 相信看完后, 大家应该完全掌握了 Nacos 客户端是如何自动进行服务注册的, 以及 Nacos 客户端是如何订阅服务实例信息的, 以及 Nacos 服务器是如何处理客户端的注册和订阅请求的; 本文承上启下, 在订阅服务实例的基础上, 介绍如…...
CP AUTOSAR标准之DefaultErrorTracer(AUTOSAR_SWS_DefaultErrorTracer)(更新中……)
1 简介和功能概述 本规范描述了默认错误跟踪器的API。基础软件中检测到的所有开发和运行时错误都会报告给此模块。API参数允许跟踪错误来源和类型: 检测到错误的模块检测到错误的函数错误类型此模块API背后的功能不在本规范的范围内。软件开发人员和软件集成商应根据其特定应用…...
SpringMVC (发送请求——>参数传递—— >响应数据)
设置请求访问路径 RequestMapper:将请求访问路径和我们业务层的方法联系起来 ResponseBody:将我们业务层方法的返回值转化为json,xml或其他格式的数据返回给页面 两种请求 get请求 post请求 测试案例 RequestMapping("/getNameAndAge&…...
认识Modbus RTU与Modbus TCP
(选自成都纵横智控-Modbus RTU与Modbus TCP协议区别详解 ) Modbus RTU 和 Modbus TCP 是两种常用的工业通信协议,用于连接电子设备,但它们在多方面有所不同。以下是它们的详细比较: Modbus RTU 协议类型: …...
如何在 Kubernetes 中使用 ClickHouse 和 JuiceFS
ClickHouse 结合 JuiceFS 一直是一个热门的组合,社区中有多篇实践案例。今天的文章来自美国公司 Altinity,一家提供 ClickHouse 商业服务的企业,作者是 Vitaliy Zakaznikov,他尝试了这个组合并公开了过程中使用的代码。原文有两篇…...
云计算任务调度优化matlab仿真,对比蚁群优化和蛙跳优化
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 ACO蚁群优化 4.2 蛙跳优化 5.完整程序 1.程序功能描述 云计算任务调度优化,优化目标位任务消耗时间,调度后的经济效益以及设备功耗,对比蚁群优化算法和蛙跳优化…...
基于双PI+EKF扩展卡尔曼滤波的PMSM速度控制simulink建模与仿真
目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 PMSM数学模型 4.2 双PI控制器设计 4.3 扩展卡尔曼滤波器(EKF) 4.4 控制系统实现 5.完整工程文件 1.课题概述 基于双PIEKF扩展卡尔曼滤波的PMSM速度控制simulink建模与仿真。对比基于双PI的扩展卡…...
医疗器械注册资源宝库数屿医械官方平台!
医学影像设备市场作为医疗器械领域的佼佼者,技术门槛高且规模庞大,2021年全球规模达458亿美元,预计2022年逼近500亿美元,增长动力源自技术革新与临床需求攀升。中国市场亦不甘落后,受政策驱动与市场需求双重提振&#…...
Django如何移除数据库字段?
关键步骤: 第一步:python manage.py makemigrations 你的项目名称第二步: python manage.py migrate (.venv) PS D:\python_workpace\django_xitong_shezhi\pythonProject\myproject> python manage.py makemigrations myproject Migra…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块࿰…...
Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...
6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙
Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...
