Linux:内核调试之内核魔术键sysrq

article/2025/9/24 14:58:27

        在linux系统下,我们可能会遇到系统某个命令hang住的情况,通常情况下,我们会查看/proc/pid/wchan文件,看看进程处于什么状况,然后进一步查看系统日志或者使用strace跟踪命令执行时的系统调用等等方法来分析问题。我们知道命令hang,一般问题都出在内核里, 如果我们能根据自己的需要打印内核的信息,可能会事半功倍,很快定位到问题。

        幸运的是linux真的有提供这样的方式,就是通过SysRq,今天在这里我就介绍一下。

一、Sysrq

        SysRq(system request) 是 Linux 操作系统内核理解的一系列键,可以触发一组预定义的操作。 当无法通过传统管理 (执行虚拟机故障排除或恢复时,通常使用这些命令,例如,VM 未) 响应。 

        Sysrq被称为”魔术组合键”, 是内建于Linux内核的调试工具,只要内核没有完全锁住,不管内核在做什么事情,内核都会响应这一系列组合键,使用这些组合键可以搜集包括系统内存使用、CPU任务处理、进程运行状态等系统运行信息。

        SysRq 键在确认内核运行、调查内核死机原因等各种情况下都非常有效。

二、启用sysrq

        要想使用 Magic SysRq key 打开内核配置选项 CONFIG_MAGIC_SYSRQ,一般的发行版都默认打开该配置选项:

#

# Kernel hacking

#

......

CONFIG_MAGIC_SYSRQ=y

        当运行一个编译了SysRq的内核时,/proc/sys/kernel/sysrq文件的值控制着允许通过SysRq键(键盘组合键)调用的函数,下面是/proc/sys/kernel/sysrq中可能的值列表:

0 - disable sysrq completely

1 - enable all functions of sysrq

>1 - bitmask of allowed sysrq functions (see below for detailed function description):

      2 =   0x2 - enable control of console logging level
      4 =   0x4 - enable control of keyboard (SAK, unraw)
      8 =   0x8 - enable debugging dumps of processes etc.
     16 =  0x10 - enable sync command
     32 =  0x20 - enable remount read-only
     64 =  0x40 - enable signalling of processes (term, kill, oom-kill)
    128 =  0x80 - allow reboot/poweroff
    256 = 0x100 - allow nicing of all RT tasks

/proc/sys/kernel/sysrq文件的值控制着SysRq键(键盘组合键)的一些功能。

echo "number" >/proc/sys/kernel/sysr

例如:

echo 1 >/proc/sys/kernel/sysrq      ##设置为1时,使能SysRq键的所有功能。

或者通过 sysctl 命令也可以设置或者读写内核参数:

sysctl -w kernel.sysrq = 1

        备注:/proc/sys/kernel/sysrq的值只影响通过 键盘组合键的调用。通过/proc/sysrq-trigger调用任何操作总是被允许的(由具有管理权限的用户)。
即 /proc/sys/kernel/sysrq的值 只是影响 键盘组合键触发内核操作,对于 /proc/sysrq-trigger触发内核操作没有影响。

内核配置选项中使能CONFIG_MAGIC_SYSRQ选项,这样系统启动之后,会生成/proc/sysrq-trigger节点用于调试。

        一般用法:

sysctl -n kernel.sysrq      ####显示当前的sysrq值,通常是16, 表示使用“sysnc”命令

sysctl -w kernel.sysrq=1   ### “1”表示启用sysrq全部功能键。

sysctl -n kernel.sysrq      ###确认sysrq功能键启用,也可以用以下命令查看

若要使 SysReq 配置持久化,可以执行以下操作来启用所有 SysRq 命令

将此行添加到 /etc/sysctl.conf

kernel.sysrq = 1

或者

echo "kernel.sysrq = 1" >> /etc/sysctl.conf

通过运行重新启动或更新 sysctl

sysctl -p

三、SysRq的使用

SysRq的使用有两种方式:

  • 第一种是键盘组合键:Alt+SysRq + command key 。(受到/proc/sys/kernel/sysrq值的影响)
  • 第二种是修改/proc/sysrq-trigger文件的值。(不受/proc/sys/kernel/sysrq值的影响)

  主要介绍第二种方式:

/proc/sysrq-trigger文件的值不受/proc/sys/kernel/sysrq值的影响,所以将/proc/sys/kernel/sysrq的值设置为0,依然可以触发内核的各种事件。

[root@localhost ~]# echo 0 > /proc/sys/kernel/sysrq
[root@localhost ~]# cat /proc/sys/kernel/sysrq
0

比如:

echo t > /proc/sysrq-trigger

四、命令介绍(部分)

echo <command key> > /proc/sysrq-trigger

键名    功能说明

b         在没有同步或卸载硬盘的情况下立即启动。

c         为了获取崩溃转储执行kexe重启动。

d         显示被持的所有锁。

e         发送信号SIGTERM给所有进程,除了init外。

f         将调用oom_kill杀死内存热进程。

g         在平台ppc和sh上被kgdb使用。

h         显示帮助信息。

i         发送信号SIGKILL给所有的进程,除了init外。

k         安全访问密钥(Secure Access Key,SAK)杀死在当前虚拟终端上的所有程序。

m         转储当前的内存信息到控制台。

n         用于设置实时任务为可调整nice的。

o         将关闭系统(如果配置为支持)。

p         打印当前寄存器和标识到控制台。

q         将转储所有正运行定时器的列表。

r         关闭键盘Raw模式并设置为XLATE模式。

s         尝试同步所有挂接的文件系统。

t         将转储当前的任务列表和它们的信息到控制台。

u         尝试以仅读的方式重挂接所有已挂接的文件系统。

v         转储Voyager SMP处理器信息到控制台。

w         转储的所有非可中断(已阻塞)状态的任务。

x         在平台ppc/powerpc上被xmon(X监视器)接口使用。

0~9    设备控制台日志级别,控制将打印到控制台的内核信息。例如:0仅打印紧急信息,如:PANIC和OOPS信息。

1、echo m > /proc/sysrq-trigger

        将当前内存信息转储到主机。

2、echo t > /proc/sysrq-trigger

        该命令会输出系统中所有进程(包括系统的和用户的)的执行状态、调用栈信息

3、echo w > /proc/sysrq-trigger

转储处于不可中断 (阻止) 状态的任务。

4、echo l > /proc/sysrq-trigger

显示所有活动 CPU 的堆栈回溯。

5、echo p > /proc/sysrq-trigger

将当前寄存器和标志转储到主机。

6、echo q > /proc/sysrq-trigger

 将转储每个 CPU 列表的所有武装 hrtimers (但不是常规timer_list计时器) 和有关所有时钟事件设备的详细信息。


http://chatgpt.dhexx.cn/article/nMZ75RiS.shtml

相关文章

Linux内核sysrq调试调优

1.sysrq机制的文件系统节点 2.内核注册&#xff1a; 在drivers/tty/sysrq.c中注册的此文件节点&#xff0c; 系统依赖配置CONFIG_MAGIC_SYSRQ. 3. 实现接口 ops table的定义 以触发crash的c命令为例(echo c > /proc/sysrq-trigger) 触发方式很简单&#xff0c;直接在空指针…

了解sysrq-trigger

了解下sysrq-trigger&#xff0c;便于观察内核调试信息和debug。 echo m > /proc/sysrq-trigger 导出内存分配信息 echo t > /proc/sysrq-trigger 导出当前任务状态信息 echo c > /proc/sysrq-trigger 产生空指针panic事件&#xff0c;人为导致系统崩溃 echo p >…

Linux sysrq使用

Linux sysrq使用 1. 介绍 Sysrq被称为”魔术组合键”&#xff0c; 是内建于Linux内核的调试工具。只要内核没有完全锁住(还可以响应中断)&#xff0c;不管内核在做什么事情&#xff0c;使用这些组合键都可以搜集包括系统内存使用、CPU任务处理、进程运行状态等系统运行信息。…

决策树CART介绍*

属性划分使用Gini指数 回顾&#xff1a;ID3使用信息增益&#xff0c;C4.5使用信息增益率。都是基于计算熵&#xff0c;熵运算涉及到对数运算&#xff0c;耗时。 CART使用Gini指数代替信息增益。 直观上&#xff0c;Gini指数表示从数据集D随机抽取两个样本&#xff0c;类别不一…

cart决策树Matlab实现,CART决策树的理解及其实现

CART决策树介绍 使用CART(Classification and regression tree)算法构建的决策树是二叉树&#xff0c;它对特征进行二分&#xff0c;迭代生成决策树。 CART回归树 假设X与Y分别为输入和输出变量&#xff0c;并且Y是连续变量&#xff0c;给定训练数据集 $$D\{(x_1,y_1),(x_2,y_2…

CART决策树算法Python实现 (人工智能导论作业)

文章目录 决策树的介绍CART决策树算法简介基尼指数 CART决策树生成算法及Python代码实现 决策树的介绍 决策树是以树的结构将决策或者分类过程展现出来&#xff0c;其目的是根据若干输入变量的值构造出一个相适应的模型&#xff0c;来预测输出变量的值。预测变量为离散型时&am…

CART树分类、回归、剪枝实现

决策树ID3&#xff0c;C4.5是多叉树&#xff0c;CART树是一个完全二叉树&#xff0c;CART树不仅能完成分类也能实现回归功能&#xff0c;所谓回归指的是目标是一个连续的数值类型&#xff0c;比如体重、身高、收入、价格等&#xff0c;在介绍ID3&#xff0c;C4.5其核心是信息熵…

sklearn 决策树例子_sklearn CART决策树分类

sklearn CART决策树分类 决策树是一种常用的机器学习方法&#xff0c;可以用于分类和回归。同时&#xff0c;决策树的训练结果非常容易理解&#xff0c;而且对于数据预处理的要求也不是很高。 理论部分 比较经典的决策树是ID3、C4.5和CART&#xff0c;分别分析信息增益、增益率…

机器学习--详解CART树剪枝原理和过程

这一节主要讲前面多次的提到的决策树问题&#xff0c;前面的决策树生成算法递归的产生决策树&#xff0c;直到不能继续分支或者达到要求为止&#xff0c;这样的决策树往往对训练数据的分类很准确&#xff0c;因为他就是基于训练数据的熵或者基尼不存度进行分类的&#xff0c;因…

【树模型与集成学习】(task2)代码实现CART树(更新ing)

学习心得 task2学习GYH大佬的回归CART树&#xff0c;并在此基础上改为分类CART树。 更新ing。。 这里做一些对决策树分裂依据更深入的思考引导&#xff1a;我们在task1证明离散变量信息增益非负时曾提到&#xff0c;信息增益本质上就是联合分布和边缘分布乘积的kl散度&#xf…

CART 决策树

ID3使用信息增益&#xff0c;而C4.5使用增益比率进行拆分。 在此&#xff0c;CART是另一种决策树构建算法。 它可以处理分类和回归任务。 该算法使用名为gini索引的新度量标准来创建分类任务的决策点。 CART树的核心是决策规则将通过GINI索引值决定。 停止条件。 如果我们继续…

CART决策树算法

在进行自动识别窃漏电用户分析实战时&#xff0c;用到了CART决策树算法&#xff0c;所以整理记录该算法的内容。内容整理参考文档决策树——CART算法及其后的参考文章。 一、CART&#xff08;classification and regression tree&#xff09;分类与回归树&#xff0c;既可用于…

CART树算法解析加举例

算法步骤 CART假设决策树是二叉树&#xff0c;内部结点特征的取值为“是”和“否”&#xff0c;左分支是取值为“是”的分支&#xff0c;右分支是取值为“否”的分支。这样的决策树等价于递归地二分每个特征&#xff0c;将输入空间即特征空间划分为有限个单元&#xff0c;并在…

ID3、C4.5与CART树的联系与区别

ID3、C4.5与CART树的联系与区别&#xff1a; 参考博客&#xff1a; 链接1 链接2 特征选择准则&#xff1a; ID3的特征选择准则为信息增益&#xff0c;即集合D的经验熵H(D)与给定特征A下条件经验熵H(D|A)之差&#xff0c;即&#xff1a; H(D)表现了数据集D进行分类的不确定性…

决策树构建算法—ID3、C4.5、CART树

决策树构建算法—ID3、C4.5、CART树 决策树构建算法—ID3、C4.5、CART树 构建决策树的主要算法ID3C4.5CART三种算法总结对比 决策树构建算法—ID3、C4.5、CART树 构建决策树的主要算法 ID3C4.5CART &#xff08;Classification And Rsgression Tree&#xff09; ID3 ID3算法…

3-6 决策树、CART树、GBDT、xgboost、lightgbm一些关键点梳理

目录 1、决策树 2、CART树 2.1 CART分类树-输入样本特征&#xff1b;输出样本对应的类别(离散型) 2.2 CART回归树-输入样本特征&#xff1b;输出样本的回归值(连续型) 3、GBDT 3.1 提升树 3.2 GBDT 4、xgboost 4.1 损失函数及节点展开 4.2 精确贪心算法及相关近似算法…

CART树回归

说明&#xff1a;本博客是学习《python机器学习算法》赵志勇著的学习笔记&#xff0c;其图片截取也来源本书。 基于树的回归算法是一类基于局部的回归算法&#xff0c;通过将数据集切分成多份&#xff0c;在每一份数据中单独建模。与局部加权线性回归不同的是&#xff0c;基于…

剪枝、cart树

一、剪枝 1. 为什么要剪枝 在决策树生成的时候&#xff0c;更多考虑的是训练数据&#xff0c;而不是未知数据&#xff0c;这会导致过拟合&#xff0c;使树过于复杂&#xff0c;对于未知的样本不准确。 2. 剪枝的依据——通过极小化决策树的损失函数 损失函数的定义为&#x…

【机器学习】决策树——CART分类回归树(理论+图解+公式)

&#x1f320; 『精品学习专栏导航帖』 &#x1f433;最适合入门的100个深度学习实战项目&#x1f433;&#x1f419;【PyTorch深度学习项目实战100例目录】项目详解 数据集 完整源码&#x1f419;&#x1f436;【机器学习入门项目10例目录】项目详解 数据集 完整源码&…

CART树(分类回归树)

主要内容 &#xff08;1&#xff09;CART树简介 &#xff08;2&#xff09;CART树节点分裂规则 &#xff08;3&#xff09;剪枝 --------------------------------------------------------------------------------------------------------------------- 一、简介 CART…