• 【转载】 Linux Hang Task 简介


    原文地址:

    https://gohalo.me/post/linux-kernel-hang-task-panic-introduce.html

    ---------------------------------------------------------------

    长期以来,处于 D 状态的进程都是让人比较烦恼的问题,此时不能接收信号,不能 kill 掉,用户对此基本是无能为力,而且也很难知道发生的原因,一般来说只能重启服务器恢复。

    正常来说 D 状态的任务只有在 IO 操作时会有,而且会很快完成,只有在极端的异常场景下才会出现问题,例如磁盘损坏、NFS 的 bug 等等,不过如果驱动写的完善的话,一般会增加超时机制,原则上不会出现永久的 D 状态进程。

    也就是说,只有在内核驱动不合理的时候可能会导致进程长期处于 D 状态,无法唤醒,类似于死锁状态。

    简介

    针对这种情况,内核在 3.10.0 版本之后提供了 hung task 机制,用来检测系统中长期处于 D 状体的进程,如果存在,则打印相关警告和进程堆栈。

    如果配置了 hung_task_panic ,则会直接发起 panic 操作,然后结合 kdump 可以搜集到相关的 vmcore 文件,用于定位分析。

    其基本原理也很简单,系统启动时会创建一个内核线程 khungtaskd,定期遍历系统中的所有进程,检查是否存在处于 D 状态且超过 120s 的进程,如果存在,则打印相关警告和进程堆栈,并根据参数配置决定是否发起 panic 操作。

    配置项

    与 hung task 相关的配置项主要有如下几个,可以直接通过 echo 'xx' > file 的方式进行修改。

    ----- 处于D状态的超时时间,默认是120s
    $ cat /proc/sys/kernel/hung_task_timeout_secs
    
    ----- 发现hung task之后是否触发panic操作
    $ cat /proc/sys/kernel/hung_task_panic
    
    ----- 每次检查的进程数
    $ cat /proc/sys/kernel/hung_task_check_count
    
    ----- 为了防止日志被刷爆,设置最多的打印次数
    $ cat /proc/sys/kernel/hung_task_warnings



    内核通知链

    在 Linux 内核中,各子系统之间有很强的关联关系,例如某些子系统可能对其它子系统产生的事件感兴趣。

    为了在各个子系统之间发送信息,Linux 内核引入了通知链技术,只在内核的子系统之间使用,而不能够在内核和用户空间进行事件的通知。


    本博客是博主个人学习时的一些记录,不保证是为原创,个别文章加入了转载的源地址还有个别文章是汇总网上多份资料所成,在这之中也必有疏漏未加标注者,如有侵权请与博主联系。
  • 相关阅读:
    摩拜单车--获地球卫士奖
    项目经理--读书静心的日子
    20165219 Exp1 PC平台逆向破解
    2018-2019-2 20165219《网络对抗技术》Exp0 Kali安装 Week1
    2018-2019-1 20165219《信息安全系统设计基础》实验五
    ### 2018-2019-1 20165219《信息安全系统设计基础》实验四
    实现mypwd
    mybash的实现
    2018-2019-1 20165219 实验三 实时系统
    2018-2019-1 20165219 《信息安全系统设计基础》第七周学习总结
  • 原文地址:https://www.cnblogs.com/devilmaycry812839668/p/14598890.html
Copyright © 2020-2023  润新知