【Linux 维测专栏 1 -- Hung Task 分析与验证】

文章目录

  • Linux Hung Task 简介
    • 1. Hung Task 概述
    • 2. D 状态与 Hung Task
    • 3. Hung Task 的工作原理
    • 4. Hung Task 的配置
    • 5. Hung Task 的典型输出
    • 6. Hung Task 的应用场景
    • 7. kernel 配置
      • 7.1 编译选项
      • 7.2 参数控制
      • 7.3 验证方法
      • 4. 扩展接口
    • 8. 注意事项

Linux Hung Task 简介

1. Hung Task 概述

Hung Task 是 Linux 内核中的一个检测机制,用于监控长时间处于 D 状态(不可中断睡眠状态) 的任务(进程或线程)。如果某个任务在 D 状态停留时间过长,内核会认为该任务可能已经“挂起”(Hung),并触发相应的警告或调试信息,帮助开发者定位问题。

2. D 状态与 Hung Task

  • D 状态(不可中断睡眠状态)
    任务在等待某些内核资源(如 I/O 操作、锁等)时进入 D 状态。
    在 D 状态的任务不会响应信号(如 SIGKILL),因此无法被强制终止。
    如果任务长时间处于 D 状态,可能会导致系统性能下降或死锁。

  • Hung Task 检测
    Hung Task 机制会定期扫描系统中的任务,检查是否有任务在 D 状态停留时间超过预设阈值。
    如果检测到 Hung Task,内核会记录相关信息(如任务名称、PID、堆栈跟踪等),并触发警告。

3. Hung Task 的工作原理

  • 初始化
    在内核启动时,Hung Task 检测机制会初始化一个内核线程(khungtaskd),用于定期扫描系统中的任务。

  • 任务扫描
    khungtaskd 线程会定期(默认每 120 秒)遍历所有任务,检查其状态和处于 D 状态的时间。

  • 阈值判断
    如果某个任务在 D 状态的时间超过预设阈值(默认 120 秒),则判定为 Hung Task。

  • 触发警告
    内核会记录 Hung Task 的详细信息,包括:

    • 任务名称和 PID。
    • 任务的堆栈跟踪。

这些信息会通过内核日志(dmesg)输出,便于开发者分析。

4. Hung Task 的配置

Hung Task 的行为可以通过以下内核参数进行配置:

  • hung_task_timeout_secs
    定义任务在 D 状态的最大允许时间(单位:秒)。
    默认值:120 秒。
    示例:hung_task_timeout_secs=60。

  • hung_task_panic
    如果设置为 1,当检测到 Hung Task 时,内核会直接触发 panic。
    默认值:0(仅记录警告,不触发 panic)。
    示例:hung_task_panic=1。

  • hung_task_check_count
    定义每次扫描时检查的任务数量。
    默认值:1024。
    示例hung_task_check_count=2048

  • hung_task_warnings
    定义最大警告次数。超过该次数后,不再记录 Hung Task 警告。
    默认值:10。
    示例hung_task_warnings=5

5. Hung Task 的典型输出

当检测到 Hung Task 时,内核日志中会输出类似以下信息:

INFO: task mytask:1234 blocked for more than 120 seconds.Tainted: G           OE
"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
mytask      D ffffffff810a3b80     0  1234   1233 0x00000000
Call Trace:[<ffffffff810a3b80>] ? __schedule+0x320/0x8c0[<ffffffff810a3b80>] ? __schedule+0x320/0x8c0[<ffffffff810a3b80>] ? __schedule+0x320/0x8c0
  • 任务名称:mytask。
  • PID:1234。
  • 阻塞时间:超过 120 秒。
  • 堆栈跟踪:显示任务在内核中的调用路径。

6. Hung Task 的应用场景

  • 调试死锁
    当任务因竞争锁资源而进入 D 状态时,Hung Task 可以帮助定位死锁问题。

  • 分析 I/O 问题:
    如果任务因等待 I/O 操作而挂起,Hung Task 可以提供堆栈信息,帮助分析 I/O 瓶颈。

  • 系统性能监控:
    通过 Hung Task 检测,可以及时发现系统中的异常任务,避免系统性能下降。

7. kernel 配置

7.1 编译选项

# hung task
CONFIG_DETECT_HUNG_TASK=y
CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=30
CONFIG_TEST_LOCKUP=m

7.2 参数控制

hung_task参数控制节点:/proc/sys/kernel/

hung_task_all_cpu_backtrace       // 打印所有core的调用栈
hung_task_panic                   // hung task触发panic
hung_task_check_count             //一次check 多少进程
hung_task_timeout_secs            // hung task 判断标准
hung_task_check_interval_secs     // khungd隔多久检查一次,取 和 hung_task_timeout_secs    比较的最小值
hung_task_warnings                // warnings 次数

7.3 验证方法

验证命令

echo 1 > /proc/sys/kernel/hung_task_all_cpu_backtrace
echo 20 > /proc/sys/kernel/hung_task_timeout_secs
modprobe test_lockup time_secs=100 iterations=40 state=D

在这里插入图片描述

4. 扩展接口

编译打开:CONFIG_DETECT_HUNG_TASK_EXT

echo on > /sys/kernel/hung_task/enable      // 打开ext
echo "whitelist,xxx" > /sys/kernel/hung_task/monitorlist   // 添加白名单程序,格式:whitelist,xxx,yyy,zzz

8. 注意事项

  • 性能开销:
    Hung Task 检测会定期扫描任务列表,可能对系统性能产生一定影响。在高负载系统中,建议根据实际情况调整检测频率。

  • 误报问题:
    某些任务可能因长时间等待合法资源而处于 D 状态,导致误报。需要结合具体场景分析。

通过 Hung Task 机制,Linux 内核能够有效监控系统中的异常任务,帮助开发者快速定位和解决系统挂起问题。

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

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

相关文章

GCC 预定义宏:解锁编译器的隐藏信息

GCC 预定义宏&#xff1a;解锁编译器的隐藏信息 在 GCC 编译器中&#xff0c;有许多内置的预定义宏&#xff0c;它们可以提供编译环境的信息&#xff0c;如文件名、行号、时间、版本等。这些宏在调试、日志记录、条件编译等场景中非常有用。本文将介绍常见的 GCC 预定义宏&…

公链开发费用及其构成内容详析

在区块链技术迅速发展的今天&#xff0c;公链&#xff08;Public Blockchain&#xff09;作为去中心化、不可篡改、高安全性的重要应用之一&#xff0c;在金融、供应链、游戏等多个领域得到了广泛应用。然而&#xff0c;开发一条公链并非易事&#xff0c;它不仅需要高度专业技能…

Java求101-200之间有多少素数

Java学习笔记 今天看教程看到了这个题&#xff0c;对于一名打过算法竞赛的选手还是很简单的&#xff0c;但由于之前是c组的&#xff0c;所以用java写一下&#xff0c;练一下手。 代码&#xff1a; package com.itheima.hello;public class Test1 {public static void main(S…

DM 达梦上的日志挖掘 DBMS_LOGMNR

适用场景 在 DM 中&#xff0c;用户可以使用 DBMS_LOGMNR 包对归档日志进行挖掘&#xff0c;重构出 DDL 和 DML 等操作&#xff0c;并通过获取的信息进行更深入的分析&#xff1b;同样&#xff0c;可以对归档日志文件进行恢复被误操作的数据&#xff0c;并进行故障跟踪&#x…

JavaWeb之WebSocket

目录 一、 websocket 概念二、WebSocket原理三、WebSocket特点四、WebSocket应用场景五、Websocket基本使用1、创建Websocket对象2、Websocket事件3、Websocket方法4、前端服务程序 六、聊天室案例1、Tomcat版本&#xff1a;8.0.442、Maven 依赖&#xff1a;3、前端代码4、后端…

Unity Shader编程】之透明物体渲染

以下是针对您提出的关于 Unity Shader 渲染 Pass 的查看方法、多个 Pass 的影响、Pass 的含义&#xff0c;以及 Unity 渲染物体的流程和处理多个透明/半透明/不透明物体的详细解答。 1. Unity Shader 渲染 Pass 的查看方法 查看 Pass 的方法 通过 Shader 代码&#xff1a; 打开…

字符指针的三道例题+算法改进

目录 一.杨氏矩阵 1.初级 2.想把下标带回来 二.字符串左旋 算法改进 三.判断是否为字符串旋转结果 算法改进 四. 3个字符函数 1.strcat 2.strncat 3.strstr 一.杨氏矩阵 数字矩阵&#xff0c;每行从左到右递增&#xff0c;每列从上到下递增&#xff0c;编写程序在矩…

VSCode中搜索插件显示“提取扩展时出错。Failed to fetch”问题解决!

大致的问题如下&#xff0c;在VSCode的插件商店搜索插件时提示如下&#xff1a; 导致的情况有以下几点&#xff1a; 1、代理问题&#xff0c;如果是代理引起的&#xff0c;可以继续使用代理后也能搜索和安装插件。 2、还有可能是你的所连接的网络设置了防火墙&#xff0c;比较…

双指针(2)—三数之和

文章目录 题目解析解法&#xff08;排序双指针&#xff09;&#xff1a;哈希解法附加Java代码&#xff1a; 力扣题目&#xff1a;三数之和 题目解析 解法&#xff08;排序双指针&#xff09;&#xff1a; **算法思路&#xff1a;** 本题与两数之和类似&#xff0c;是⾮常经典的…

设计一套水产养殖系统

设计一套水产养殖系统 引言 水产养殖在全球粮食安全和经济发展中日益重要。它不仅为不断增长的人口提供了重要的蛋白质来源&#xff0c;还在许多地区创造了就业机会并促进了经济增长 。全球超过一半的人类消费的海产品来自水产养殖&#xff0c;并且这一比例预计将继续上升 。…

统计可重复列表中的TOP N

文章目录 方案1&#xff1a;HashMap统计 全排序实现步骤&#xff1a;代码实现&#xff1a;优缺点&#xff1a; 方案2&#xff1a;HashMap统计 最小堆&#xff08;优先队列&#xff09;实现步骤&#xff1a;代码实现&#xff1a;优缺点&#xff1a; 方案3&#xff1a;Java Str…

JVM 知识点梳理

JDK 、JRE、JVM JDK&#xff08; Java Development Kit &#xff09; Java开发工具包 JRE 开发命令工具&#xff08;运行java.exe、编译javac.exe、javaw.exe&#xff09; JRE&#xff08; Java Runtime Environment &#xff09;Java运行环境 JVM Java核心类库&#xff08;l…

淘宝历史价格数据获取指南:API 与爬虫方案的合法性与效率对比

引言 在淘宝平台的购物生态中&#xff0c;消费者希望通过了解商品历史价格来判断当前价格是否实惠&#xff0c;商家也需要借助历史价格数据制定合理的营销策略、分析市场趋势。获取淘宝商品历史价格数据主要有 API 和爬虫两种方案&#xff0c;它们在合法性与效率上存在显著差异…

DeepSeek-R1论文深度解析:纯强化学习如何引爆LLM推理革命?

技术突破&#xff1a;从“无监督”到“自主进化”的跨越 paper &#xff1a;https://arxiv.org/pdf/2501.12948目录 技术突破&#xff1a;从“无监督”到“自主进化”的跨越1 DeepSeek-R1-Zero&#xff1a; RLnoSFT1.1 R1-Zero&#xff1a; GRPO&#xff08;Group Relative Po…

表格标题竖直

使用文本方式使表格怎么竖列 思路&#xff1a;表格竖直书写&#xff0c;里面的内容水平书写 使用到的是css中的文本效果&#xff1a; writing-mode&#xff1a;书写方式horizontal-tb&#xff1a;水平vertical-rl&#xff1a;竖直<style>table {writing-mode: vertical…

AI+视频赋能智慧农业:EasyCVR打造全域可视化农场监管平台

随着科技的飞速发展&#xff0c;传统农业正加速向智慧农业转型&#xff0c;农场管理也迎来了前所未有的变革机遇。在这一进程中&#xff0c;如何有效整合先进的信息技术&#xff0c;实现农场的精准化、智能化管理&#xff0c;成为了摆在农场主和农业管理者面前的关键课题。 基于…

HarmonyOS鸿蒙开发 BuilderParam在父组件的Builder的点击事件报错:Error message:is not callable

HarmonyOS鸿蒙开发 BuilderParam在父组件的Builder的点击事件报错&#xff1a;Error message:is not callable 最近在鸿蒙开发过程中&#xff0c;UI做好了&#xff0c;根据列表item进行点击跳转&#xff0c;报错了 报错信息如下 Error message:is not callable Stacktrace:at…

简化神经元模型6 -- Hindmarsh-Rose Model

Hindmarsh-Rose 模型 目录 0. 写在前面 1. Hindmarsh-Rose 模型的定义 2. Hindmarsh-Rose 模型簇发放的动力学机制 3. Hindmarsh-Rose 模型的其他发放模式 4. 分析过程所用到的一系列 BrainPy 代码 0. 写在前面 前面介绍了: Hodgkin-Huxley Model 简化神经元模型1 – LIF M…

第六届电气、电子信息与通信工程国际学术会议 (EEICE 2025)

重要信息 官网&#xff1a;www.eeice.net&#xff08;点击了解参会投稿等&#xff09; 时间&#xff1a;2025年4月18-20日 地点&#xff1a;中国-深圳技术大学 简介 第六届电气、电子信息与通信工程 (EEICE 2025&#xff09;将于2025年4月18-20日在中国深圳召开。 EEICE 20…

计算机操作系统(三) 操作系统的特性、运行环境与核心功能(附带图谱更好对比理解))

计算机操作系统&#xff08;三&#xff09; 操作系统的特性、运行环境与核心功能 前言一、操作系统的基本特性1.1 并发1.2 共享1.3 虚拟1.4 异步 二、操作系统的运行环境2.1 硬件支持2.2 操作系统内核2.3 处理机的双重工作模式2.4 中断与异常 三、操作系统的主要功能3.1 处理机…