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

【实际案例】服务器宕机情况分析及处理建议

了解银河麒麟操作系统更多全新产品,请点击访问麒麟软件产品专区: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。

相关文章:

【实际案例】服务器宕机情况分析及处理建议

了解银河麒麟操作系统更多全新产品&#xff0c;请点击访问麒麟软件产品专区&#xff1a;https://product.kylinos.cn 服务器环境以及配置 物理机/虚拟机/云/容器 物理机 外网/私有网络/无网络 私有网络 处理器&#xff1a; Kunpeng 920 内存&#xff1a; 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三步法&#xff1a; 1、配置下载线 2、配置晶振 3、配置时钟 注意&#xff1a;中断优先级&#xff08;这里防止HAL_Delay卡死&#xff0c;详细请看 http://t.csdnimg.cn/NQhQV&#xff09; 4、 配置灯引脚属性为输出模式。并设置标签为LED 生成代码&#xff1a;编写while里…...

记一次远程API调用失败

记一次远程API调用失败 最近开发忙&#xff0c;项目紧&#xff0c;系统出现一些忽隐忽现的问题&#xff0c;本地也不能复现&#xff0c;当时也无法理解&#xff0c;就先搁置了&#xff0c;现在回想起来&#xff0c;这里还是明智的。 这个bug很神奇 今天&#xff0c;原本好好的…...

【力扣】746.使用最小花费爬楼梯

题目描述 给你一个整数数组 cost &#xff0c;其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用&#xff0c;即可选择向上爬一个或者两个台阶。 你可以选择从下标为 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框架&#xff0c;它允许开发者使用Dart语言来构建高性能、高保真的iOS和Android应用。Flutter的设计理念是"编写一次&#xff0c;到处运行"&#xff08;write once, run everywhere&#xff09;&#xff0c;这意味着开发者可以…...

WT2605C蓝牙语音芯片赋能对讲机新体验:无屏操控、音频解码与蓝牙音箱三合一

一、产品概况 对讲机市场是一个技术成熟且具有广泛应用前景的市场。对讲机作为无线通信设备的一种&#xff0c;在许多不同的领域和业务中发挥着重要作用。从技术发展角度来看&#xff0c;对讲机经历了从模拟到数字的转型&#xff0c;以及从简单通信工具向多功能设备的演进。当…...

ctfshow-web入门-sql注入(web191-web195)

目录 1、web191 2、web192 3、web193 4、web194 5、web195 1、web191 过滤了 ascii 使用 ord 代替&#xff1a; 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 &#xff08;SP) 4.1.3 Program Counter &#xff08;PC) 4.1.4 Exception Link Register(ELR) 4.1.5 Saved Process Status Register &#xff08;SPSR&#xff09; 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&#xff1a;将请求访问路径和我们业务层的方法联系起来 ResponseBody&#xff1a;将我们业务层方法的返回值转化为json&#xff0c;xml或其他格式的数据返回给页面 两种请求 get请求 post请求 测试案例 RequestMapping("/getNameAndAge&…...

认识Modbus RTU与Modbus TCP

&#xff08;选自成都纵横智控-Modbus RTU与Modbus TCP协议区别详解 &#xff09; Modbus RTU 和 Modbus TCP 是两种常用的工业通信协议&#xff0c;用于连接电子设备&#xff0c;但它们在多方面有所不同。以下是它们的详细比较&#xff1a; Modbus RTU 协议类型&#xff1a; …...

如何在 Kubernetes 中使用 ClickHouse 和 JuiceFS

ClickHouse 结合 JuiceFS 一直是一个热门的组合&#xff0c;社区中有多篇实践案例。今天的文章来自美国公司 Altinity&#xff0c;一家提供 ClickHouse 商业服务的企业&#xff0c;作者是 Vitaliy Zakaznikov&#xff0c;他尝试了这个组合并公开了过程中使用的代码。原文有两篇…...

云计算任务调度优化matlab仿真,对比蚁群优化和蛙跳优化

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 ACO蚁群优化 4.2 蛙跳优化 5.完整程序 1.程序功能描述 云计算任务调度优化,优化目标位任务消耗时间&#xff0c;调度后的经济效益以及设备功耗&#xff0c;对比蚁群优化算法和蛙跳优化…...

基于双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的扩展卡…...

医疗器械注册资源宝库数屿医械官方平台!

医学影像设备市场作为医疗器械领域的佼佼者&#xff0c;技术门槛高且规模庞大&#xff0c;2021年全球规模达458亿美元&#xff0c;预计2022年逼近500亿美元&#xff0c;增长动力源自技术革新与临床需求攀升。中国市场亦不甘落后&#xff0c;受政策驱动与市场需求双重提振&#…...

Django如何移除数据库字段?

关键步骤&#xff1a; 第一步&#xff1a;python manage.py makemigrations 你的项目名称第二步&#xff1a; python manage.py migrate (.venv) PS D:\python_workpace\django_xitong_shezhi\pythonProject\myproject> python manage.py makemigrations myproject Migra…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 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> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇&#xff1a;Liunx环境下搭建PaddlePaddle 3.0基础环境&#xff08;Liunx Centos8.5安装Python3.10pip3.10&#xff09; 一&#xff1a;前言二&#xff1a;安装编译依赖二&#xff1a;安装Python3.10三&#xff1a;安装PIP3.10四&#xff1a;安装Paddlepaddle基础框架4.1…...

6️⃣Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙

Go 语言中的哈希、加密与序列化:通往区块链世界的钥匙 一、前言:离区块链还有多远? 区块链听起来可能遥不可及,似乎是只有密码学专家和资深工程师才能涉足的领域。但事实上,构建一个区块链的核心并不复杂,尤其当你已经掌握了一门系统编程语言,比如 Go。 要真正理解区…...