遇到“BUG: soft lockup - CPU#0 stuck for 22s”的解决思路

2023-11-04

之前开发的抓包模块上线后有客户反馈有丢包问题,这两天在定位这个丢包问题,抓包模块由我和另一名“队友”负责,我负责底层抓包开发,他负责接收处理。在测试丢包问题的时候,他遇到一个板子连不上的情况,问我咋回事,刚好看到了log打印一行,

[27468.016028] BUG: soft lockup - CPU#1 stuck for 22s! [hagnatsd:1782]
HELLO! BOOT0 is starting!
boot0 version : 4.0.0
rtc[1] value = 0x00010000

一看就是内核软锁死,然后系统重启了。这个问题比较严重,如果模块有问题不影响系统运行还算小事,但系统挂了那就算大事了。当时也是一头雾水,用了那么久,怎么突然跑出来这样的问题。看问题应该是代码里面原子锁的使用问题,导致系统锁死,代码比较多,一时半会儿又走读不过来,于是就尝试复现这个问题。瞎搞了两个小时, 功夫不负有心人 (⊙_⊙) ,终于又出现了一次, 同样是锁死

[  688.008033] BUG: soft lockup - CPU#0 stuck for 22s! [quickstart:2532]
[  723.231005] INFO: rcu_preempt self-detected stall on CPU
[  723.232008] INFO: rcu_preempt detected stalls on CPUs/tasks: { 0} (detected by 3, t=60002 jiffies)
[  723.232024] INFO: Stall ended before state dump start
[  723.231005] Backtrace for cpu 0 (current):
[  723.231005] 
[  723.231005] sending IPI to all other CPUs:
[  723.265047] IPI backtrace for cpu 2
[  723.266009] IPI backtrace for cpu 1
[  723.271893] IPI backtrace for cpu 3
[  723.273107] IPI backtrace for cpu 5
[  723.266009] IPI backtrace for cpu 7
[  723.266009] IPI backtrace for cpu 6
[  723.295307] IPI backtrace for cpu 4
[  760.144028] BUG: soft lockup - CPU#4 stuck for 22s! [swapper/4:0]
[  787.618047] CIFS VFS: Server 172.25.1.90 has not responded in 120 seconds. Reconnecting...
[  903.236006] INFO: rcu_preempt self-detected stall on CPU
[  903.237012] INFO: rcu_preempt detected stalls on CPUs/tasks: { 0} (detected by 6, t=240007 jiffies)
[  903.237028] INFO: Stall ended before state dump start
[  903.236006] Backtrace for cpu 0 (current):
[  903.236006] 

于是分析了自己的操作步骤,将代码流程分开,一步一步测试,最终问题定位到一处代码BUG, 程序走到死循环导致外部的读写锁无法释放,修改后得以解决。

总结经验就是平常遇到这类问题一定要重视,千万不要放过,就算不能解决也要找boss聊一聊其它方案。不然等到了客户那边问题会更大,而且不在现场更不方便调试。其次就是仔细分析问题产生现象,尝试重现问题,再结合具体的代码流程分析,类似这种软锁死问题基本上就是自身代码逻辑问题,仔细走读代码,分析代码流程 一步一步测试,最终定位问题根源才会彻底解决问题。

=============================================================================================

Linux应用程序、内核、驱动、后台开发交流讨论群(745510310),感兴趣的同学可以加群讨论、交流、资料查找等,前进的道路上,你不是一个人奥^_^。
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

遇到“BUG: soft lockup - CPU#0 stuck for 22s”的解决思路 的相关文章

  • Linux内存回收入口

    概述 内存回收主要是有kswapd异步回收和direct reclaim同步回收两种入口 其中逻辑非常复杂 本文主要只概要描述不同回收场景下内核设计的主要思想 源码细节不同版本有不少区别 具体的分析后续会有专门的文章分析 页面回收常识 页面
  • setns对当前进程无效问题的排查(getpid获取值不变)

    1 复现流程及lxc的处理 demo1程序与执行结果如下 此时在容器内部看不到执行的程序 int main int ret fd pid printf father pid old d n getpid fd open dev ns O R
  • 内核7-线程间同步

    目录 1 信号量 1 1 信号量机制 1 2 信号量的使用场合 1 2 1 线程同步 1 2 2 锁 1 2 3 中断与线程的同步 1 2 4 资源计数 1 3 信号量控制块 1 4 函数 1 4 1 rt sem init 函数 1 4
  • make编译内核驱动模块

    make编译内核驱动模块 方法一 obj m hello world o KDIR home july7 prj Firefly RK3308 kernel 内核源码路径 PWD shell pwd 获取当前目录的变量 all make C
  • i5 11300h和R5 5600H 参数对比哪个好

    酷睿i5 11300H配置为4个内核及8个线程 具备8MB的L3缓存和5MB的L2缓存 基础频率3 10GHz最高睿频4 40GHz Intel的显卡将集成Xe GPU内核 至于TDP i5 11300H TDP为35W 最高可配置为45W
  • 解析 Linux 内核可装载模块的版本检查机制

    解析 Linux 内核可装载模块的版本检查机制 王 华东 系统工程师 自由职业者 简介 为保持 Linux 内核的稳定与可持续发展 内核在发展过程中引进了可装载模块这一特性 内核可装载模块就是可在内核运行时加载到内核的一组代码 通常 我们会
  • 教你动手移植RT-Thread到国产MCU

    摘要 现在芯片价格不断上涨 国内很多厂商也在不断的找替换方案 以ST为例 一个芯片涨了十几倍 蛋疼 最近刚好有机会拿到国产芯片MCU 兆易创新的评估板 GD32350R 板载资源如下 硬件 描述 芯片型号 GD32F350R8T6 CPU
  • Linux mmap系统调用视角看缺页中断

    问题 1 mmap具体是怎么实现比read write少一次内存copy的 2 mmap共享映射和私有映射在内核实现的时候到底有什么区别 3 mmap的文件映射和匿名映射在内核实现的时候到底有什么区别 4 父子进程的COW具体怎么实现的 概
  • 内核中的位图介绍(DECLARE_BITMAP宏)

    1 DECLARE BITMAP宏定义 define DIV ROUND UP x y x y 1 y 向上取整 define BITS TO LONGS nr DIV ROUND UP nr BITS PER BYTE sizeof lo
  • 还不会部署高可用的kubernetes集群?企业DevOps实践之使用kubeadm方式安装高可用k8s集群v1.23.7...

    关注 WeiyiGeek 公众号 设为 特别关注 每天带你玩转网络安全运维 应用开发 物联网IOT学习 原文地址 还不会部署高可用的kubernetes集群 企业DevOps实践之使用kubeadm方式安装高可用k8s集群v1 23 7 本
  • redis的多路复用原理

    redis服务端对于命令的处理是单线程的 但是在I O层面却可以同时面对多个客户端并发的提供服务 并发到内部单线程的转化通过多路复用框架实现 一个IO操作的完整流程是数据请求先从用户态到内核态 也就是操作系统层面 然后再调用操作系统提供的a
  • Source Insight给Linux内核创建工程

    所有文档请关注公众号 一口Linux 后台回复 ubuntu linux驱动视频同步更新到 https live bilibili com 22719960 一 Source Insight安装 1 预先准备好 Source Insight
  • 关于 Linux 之父,你可能不知道的 7 件事

    如果让你现在说出三个程序员的名字 Linus 很可能就在其中 作为世界上最著名的电脑程序员 黑客之一 Linus Benedict Torvalds 写出了 Linux 内核 1 0 版 发起了开源运动 开发了代码管理工具 Git 这三个成
  • __setup宏定义

    setup宏定义 struct obs kernel param const char str int setup func char int early define initconst section init rodata defin
  • put_user

    Linux设备驱动开发笔记 1 复制链接 0 0 skyily 白手起家 帖子 108 主题 105
  • late_initcall和module_init

    late initcall和module init 分类 linux驱动程序设计 2012 11 04 15 14 3680人阅读 评论 0 收藏 举报 所有的 init函数在区段 initcall init中还保存了一份函数指针 在初始化
  • linux网络全景指南

    自我介绍 腾讯云网络高级工程师 腾讯云网络核心开发人员 欢迎微信搜索 职场重生 关注公众号 职场重生 后续更多精彩内容发布 万字长文 建议收藏 引言 本期分享一个比较常见的 络问题 丢包 例如我们去ping 个 站 如果能ping通 且 站
  • 深入解决Linux内存管理之page fault处理

    说明 Kernel版本 4 14 ARM64处理器 Contex A53 双核 使用工具 Source Insight 3 5 Visio 1 概述 内核实现只是在进程的地址空间建立好了vma区域 并没有实际的虚拟地址到物理地址的映射操作
  • nmap操作系统检测_Nmap操作系统检测

    nmap操作系统检测 rps include post 6632 rps include post 6632 One of the most popular feature of nmap is its Operating System d
  • Linux源码编译开启cgroup blk限制io性能

    编译选项 内核5 9 General Setup gt Control Group support gt io controller Enable the block layer gt Block layer bio throttling

随机推荐

  • DDL语言的使用

    第1关 创建数据库 编程要求 在右侧窗口编写 SQL 并创建一个名为 teachingdb 的教学数据库 连接数据库的用户名为 root 密码为 123123 请在此编写代码 操作完毕之后点击评测 Begin create database
  • 蓝桥杯VIP算法训练-轨道炮-看完秒懂的(c++map)

    题目描述 小明在玩一款战争游戏 地图上一共有 N 个敌方单位 可以看作 2D 平面上的点 其中第 i 个单位在 0 时刻的位置是 Xi Yi 方向是 Di 上下左右之一 用 U D L R 表示 速度是 Vi 小明的武器是轨道炮 只能使用一
  • Typescript--Typescript中的新增类型

    一 any any表示的是任意类型 一个变量设置类型为any后 相当于该变量管理了TS的类型检测 尽量不要用any let d any 声明变量如果不指定类型 则TS解析器会自动判断变量的类型为any 隐式的any let d d 10 d
  • DataFrame数据的多种遍历方法

    后续补充 遍历DataFrame的三种方法 iteritem 方法返回一个
  • Unity初探(光源类型与光照模式)

    0 引子 unity的光源有四种 每种光源都有3种光照模式 而场景中不同模式的光源而且对静态和动态的对象有不同的效果 而官方文档又显得有点晦涩难懂 如果是初学者第一次阅读 比如说我 难免会被场景中动态和静态游戏对象与不同模式光源的交互 以及
  • 【DATAX】datax读取hive分区表时,空分区任务报错问题解决

    问题场景 之前在 Dolphinscheduler调度Datax任务读取Hive分区表案例 博客中我分享了调度任务读取hive分区的几个场景 当时提到了分区中有空文件的解决方案 除此之外 我们还遇到了空分区的场景 即该分区没有数据 连所谓的
  • BLS with Random Oracle; BLS 短签名在随机谕言机模型下的安全证明 内容小结

    BLS with Random Oracle BLS 短签名在随机谕言机模型下的安全证明 内容小结 密码学安全规约推荐书目 博客为这两本书学习笔记与内容小结 密码学中的可证明安全性 杨波 清华大学出版社 Introduction to Se
  • 优化图形性能

    良好的性能对很多游戏的成功至关重要 以下几条简单法则有助于将游戏的渲染速度最大化 找出影响图形性能的主要因素 游戏的图形部分主要影响计算机的两个系统 CPU 和 GPU 找到性能问题所在是一切优化的首要法则 因为 GPU 与 CPU 的优化
  • qt 信号与槽机制,登录界面跳转

    登录界面跳转 配置文件 pro QT core gui texttospeech greaterThan QT MAJOR VERSION 4 QT widgets CONFIG c 11 The following define make
  • JDK源码中为什么在方法中创建一个临时变量替代成员变量、类变量

    JDK源码中为什么在方法中创建一个临时变量替代成员变量 类变量 又名 临时变量提高Java代码性能 一个Java类中可以存在多种形式的变量 可以是最一般的成员变量 或静态变量 或临时变量 那么这三种变量的存取效率如何 1 实战出真知 pac
  • 【ML on Kubernetes】第 6 章:机器学习工程

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 其他常用类

    1 Json和对象之间的转换 2 StringUtils StringUtils isNotBlank 判断不为空且也不是空字符串 3 BeanCopier BeanCopier是Cglib包中的一个类 用于对象的复制 net sf cgl
  • MySQL基础--(函数,函数返回值)

    含义 一组预先编译好的sql语句的集合 理解成成批的语句 1 提高代码的重用性 2 简化操作 3 减少编译次数并且减少和数据库服务器的连接次数 提高效率 区别 存储过程 可以有0个返回 也可以有多个返回 适合做批量插入 批量更新 函数 有且
  • Sqlserver递归查询所有上级或所有下级成员

    菜单目录结构表 create table tb menu id int not null 主键id title varchar 50 标题 parent int parent id 查找所有上级节点 with cte parent id t
  • Picgo使用Gitee平台搭建图床照片无法显示

    1 问题 使用Hexo框架搭建个人博客 发现博客中图片无法显示 2 问题分析 查看图床 发现相册中图片无法显示 查阅多方网站 发现Gitee与Picgo配合使用时 图片文件不能大于1M 这主要因为Gitee查阅超过1M的文件需要登录的权限
  • PCL中的区域生长分割(region growing segmentation)

    在本博文中 我主要介绍如何在pcl RegionGrowing类中调用区域增长算法 首先注意一点 这里是region growing segmentation 不是color based region growing segmentatio
  • sql server 数据库连接方式分析、详解

    先画一张概况图 OLEDB方式连接 Sql身份验证模式 Provider SQLOLEDB data source server name initial catalog databasename uid username pwd pass
  • 大厂面试题含答案(一)

    10家大厂面试题精选 2020 年阿里精选面试题及答案 1 使用 mysql 索引都有哪些原则 索引什么数据结构 B tree 和 B tree 什么区别 2 Mysql 有哪些存储引擎 请详细列举其区别 3 设计高并发系统数据库层面该如何
  • toFixed方法的小坑你知道吗?

    toFixed方法的小坑你知道吗 都知道toFixed 方法是可以四舍五入指定的小数位数的方法 但是他也是有坑的 其四舍五入的规则与数学中的规则不同 使用的是银行家舍入规则 其实就是一种四舍六入五取偶的规则 大概意思就是是 当小数点保留两位
  • 遇到“BUG: soft lockup - CPU#0 stuck for 22s”的解决思路

    之前开发的抓包模块上线后有客户反馈有丢包问题 这两天在定位这个丢包问题 抓包模块由我和另一名 队友 负责 我负责底层抓包开发 他负责接收处理 在测试丢包问题的时候 他遇到一个板子连不上的情况 问我咋回事 刚好看到了log打印一行 27468