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

news2024/9/22 19:43:09

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

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

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

相关文章

【JVM基础18】——实践-Java内存泄漏排查思路?

目录 1- 引言&#xff1a;2- ⭐核心&#xff1a;2-1 排查思路2-2 步骤1&#xff1a;获取堆内存快照 dump2-3 步骤2、3&#xff1a;使用 VisualVM 打开 dump文件 3- 小结&#xff1a;3-1 Java内存泄漏排查思路&#xff1f; 1- 引言&#xff1a; 首先得明确哪里会产生内存泄漏的…

Solidworks API利用C# 实现物体的运动与碰撞检测

详情见github连接 SolidWorks-API-Collision-Detection Use SolidWorks API to MovePart and Collision Detection 利用solidworks的API来移动控件物体以及进行碰撞检测 visual studio 2022 利用Nuget 安装这些库 打开solidworks 可以看到有两个控件 部件运动 使用封装的函…

嵌入式初学-C语言-十七

#接嵌入式初学-C语言-十六# 函数的递归调用 含义&#xff1a; 在一个函数中直接或者间接调用了函数本身&#xff0c;称之为函数的递归调用 // 直接调用a()->a(); // 间接调用a()->b()->a();a()->b()->..->a();递归调用的本质&#xff1a; 本是是一种循环…

深入理解Spring的三级缓存机制

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

Ubuntu(20.04 LTS)更换镜像源

此换镜像源方法只适用x86_64架构的系统&#xff0c;其他架构的系统参考ubuntu-ports的方法 1、备份文件 sudo mv /etc/apt/sources.list /etc/apt/sources.list.bk2、创建新文件 sudo vi /etc/apt/sources.list根据自己系统版本选择下面对应的镜像源添加到新文件中&#xf…

智能指针--

智能指针简介 头文件&分类 智能指针都在memory中&#xff0c; 有auto_ptr, unique_ptr, shared_ptr, weak_ptr 智能指针发展史 C&#xff0b;&#xff0b;98就有智能指针了&#xff08;auto_ptr&#xff09; c&#xff0b;&#xff0b;11前&#xff0c;智能指针主要靠bo…

FPGA开发——在Quartus中实现对IP核的PLL调用

一、简介 PLL主要由鉴相器&#xff08;PD&#xff09;、环路滤波器&#xff08;LF&#xff09;和压控振荡器&#xff08;VCO&#xff09;三部分组成。鉴相器检测输入信号与VCO输出信号的相位差&#xff0c;并输出一个与相位差成正比的电压信号。该信号经过环路滤波器滤除高频噪…

esp32学习笔记

前言&#xff1a;学习视频链接放在最后&#xff0c;开发方式为esp32Arduino&#xff0c;使用型号为ESP32-WROOM-32&#xff0c;引脚功能分配图如下。 #esp32介绍 GPIO的引脚默认情况下&#xff0c;只能当做普通功能引脚使用&#xff0c;也就是只能输入&#xff0c;输出&#x…

git 常用指令(创建分支、提交分支、解决冲突)

1. 初始化git 将你的代码放入你创建的文件中&#xff0c;执行 git init(前提你电脑安装过git哈)2. 查看当前项目git 状态 git status 3. 将代码添加到暂存区 git add . &#xff08;提交所有修改的代码&#xff0c;如果向指定提交使用&#xff1a;git add <文件名>&am…

SQL语句创建数据库(增删查改)

SQL语句 一.数据库的基础1.1 什么是数据库1.2 基本使用1.2.1 连接服务器1.2.2 使用案例 1.2 SQL分类 二.库的操作2.1 创建数据库2.2 创建数据库示例2.3 字符集和校验规则2.3.1 查看系统默认字符集以及校验规则2.3.2查看数据库支持的字符集2.3.3查看数据库支持的字符集校验规则2…

【RTOS面试题】ISR中可以使用互斥锁和信号量吗?

在中断服务程序&#xff08;ISR, Interrupt Service Routine&#xff09;中直接使用互斥锁&#xff08;mutex&#xff09;和信号量&#xff08;semaphore&#xff09;是有风险的&#xff0c;因为这些同步机制通常不是中断安全的。但是&#xff0c;可以通过一些方法来安全地在 I…

QWT+Qt Creator+MSVC的配置与使用

目录 一、介绍 二、QWT下载 三、QWT编译 3.1 设置构建套件 3.2 修改QWT相关文件 3.3 进行QWT编译 四、QWT配置 4.1 配置QWT的lib文件 4.2 配置QWT的dll文件 4.3 配置QWT的designer的dll文件 五、代码实验 一、介绍 QWT&#xff0c;全称是Qt Widgets for Technical…

Python 异步编程:Asyncio 实现原理

常见的并发模型 多进程/多线程异步ActorPub/Sub Python 异步的基石&#xff1a;协程 协程简介 概念&#xff1a;协作式多任务的子程序&#xff0c;用户态线程或微线程&#xff08;Coroutine&#xff09;。 特点&#xff1a;子程序执行可以中断&#xff0c;恢复后不会丢失之…

uniapp 荣耀手机 没有检测到设备 运行到Android手机 真机运行

背景&#xff1a; 使用uniapp框架搭建的项目&#xff0c;开发的时候在浏览器运行&#xff0c;因为项目要打包成App&#xff0c;所以需要真机联调&#xff0c;需要运行到Android手机&#xff0c;在手机上查看/运行项目。通过真机调试才能确保软件开发的准确性和页面显示的完整性…

mac 2k显示器 配置

前言 今年5月份买了一个2k显示器&#xff0c;刚收到的时候发现只有一个1080 x 720&#xff08;HiDPI&#xff09;分辨率是人眼看起来比较舒服的&#xff0c;于是一直用着。但是直到开始写前端代码的时候&#xff0c;我才发现&#xff0c;网页在2k显示器和内建显示器的布局竟然…

Python 循环引用与内存泄漏:深度解析

Python 循环引用与内存泄漏&#xff1a;深度解析 在Python编程中&#xff0c;循环引用和内存泄漏是两个需要特别注意的问题。本文将深入探讨Python中的循环引用现象、其导致的内存泄漏问题&#xff0c;并提供详细的解决思路与方法。同时&#xff0c;我们还将分析一些常见场景&…

【CSDN平台BUG】markdown图片链接格式被手机端编辑器自动破坏(8.6 已修复)

文章目录 bug以及解决方法bug原理锐评后续 bug以及解决方法 现在是2024年8月&#xff0c;我打开csdn手机编辑器打算修改一下2023年12月的一篇文章&#xff0c;结果一进入编辑器&#xff0c;源码就变成了下面这个样子&#xff0c;我起初不以为意&#xff0c;就点击了发布&#…

【IoT NTN】面向 5G/6G 卫星:NTN 标准发展、关键技术与未来思考

目录 国际标准化进展 架构及关键技术 5GNTN组网架构 关键技术 1、时频同步技术 2、覆盖增强技术 3、移动性管理技术 4、混合自动重传请求技术 5、自适应调制与编码技术 挑战与潜在解决方案 星地协同全域覆盖模型 星地协同多维资源调度 星地协同多层卫星路由 星地…

网络主播进入国家职业分类!1500万主播将有新身份

在营销策划界摸爬滚打十多年的我&#xff0c;最近可是被一则劲爆消息给震撼到了——国家正式官宣了19个全新职业&#xff0c;这可是职场版图的一次大扩张啊&#xff01; 其中最让人眼前一亮的是&#xff0c;网络主播竟然堂而皇之地登上了新职业的大舞台&#xff0c;正式“转正…

【多线程-从零开始-陆】wait、notify和notifyAll

线程饿死 一个或多个线程因为无法获得执行所需的资源&#xff08;如CPU时间、锁、或其他同步控制&#xff09;而被长时间阻塞或延迟执行的情况。尽管这些线程可能处于可执行状态并且已经准备好运行&#xff0c;但由于资源分配的不均衡或调度策略的问题&#xff0c;它们无法获得…