在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计时器) 和有关所有时钟事件设备的详细信息。

Linux:内核调试之内核魔术键sysrq相关推荐

  1. MySQL内核调试_MySQL内核技术之“Opt_trace_系列”

    MySQL代码使用了大量Opt_trace相关结构,先看代码中的一段注释: This optimizer trace is aimed at producing output, which is re ...

  2. MySQL内核调试_内核调试技巧

    举个kernel-panic的例子 [ 2590.185432] Unable to handle kernel paging request at virtual address 00100110 ...

  3. WindbgPreview虚拟机双机内核调试

    #Windbg虚拟机双机内核调试 做内核调试时,我们经常使用到windbg的虚拟机双机调试,所以这里记录一下配置双机调试的过程,方便查询.另外,微软提供了一个windbgpreview 工具,算是wi ...

  4. Linux内核调试方法总结之sysrq

    sysrq [用途] Sysrq被称为"魔术组合键", 是内建于Linux内核的调试工具.只要内核没有完全锁住,不管内核在做什么事情,使用这些组合键都可以搜集包括系统内存使用.CP ...

  5. linux sysrq使用方法,Linux内核调试方法总结之sysrq

    sysrq [用途] Sysrq被称为"魔术组合键", 是内建于Linux内核的调试工具.只要内核没有完全锁住,不管内核在做什么事情,使用这些组合键都可以搜集包括系统内存使用.CP ...

  6. linux内核调试环境搭建-

    kvm系统的前端是qemu-kvm,工作在用户空间,给用户提供一套方便的kvm虚拟化工具集合.下面来介绍一下qemu-kvm-0.11.0的编译过程. 1.下载 wget http://sourcef ...

  7. Linux内核调试方法【转】

    转自:http://www.cnblogs.com/shineshqw/articles/2359114.html kdb:只能在汇编代码级进行调试: 优点是不需要两台机器进行调试. gdb:在调试模 ...

  8. Linux内核工程导论——内核调试

    Linux内核工程导论--内核调试 时间:2022-08-28 21:49:24 内核也是一个程序,一般的,调试程序常用的方法有3种:打印信息.断点执行和插入探测点. 打印信息 printk 最常用的 ...

  9. 《Linux内核设计与实现》读书笔记(十八)- 内核调试

    内核调试的难点在于它不能像用户态程序调试那样打断点,随时暂停查看各个变量的状态. 也不能像用户态程序那样崩溃后迅速的重启,恢复初始状态. 用户态程序和内核交互,用户态程序的各种状态,错误等可以由内核来 ...

最新文章

  1. 多线程共用全局变量可能存在的威胁
  2. C语言课程设计---歌厅歌曲管理系统
  3. C++中查看数据类型的方法
  4. Shell调试Debug的三种方式
  5. 图片上添加文字--div
  6. mysql 导出并压缩_mysql压缩备份导入导出
  7. wps改照片底色有红边_入学攻略丨证件照的三种换底色方式,你知道了吗?
  8. UAV 无人机检测实践分析
  9. html空心字体怎么设置,Word或者WPS如何设置阴影空心的特大字体?
  10. python正则表达式模块re
  11. python在电力系统中的应用_PyPSA在电力系统潮流计算中的应用
  12. 淘淘商城简介——淘淘商城(一)
  13. 【机器学习】LDA算法 (主题模型算法)
  14. 计算机二级office学习之Excel操作题考点整理
  15. 前端基础入门之css表格与表单
  16. java实现读取163邮箱,qq邮箱的邮件内容
  17. 三年精进笃行,用友YonSuite“数智飞轮”高速运转起来了!
  18. Xcode修改项目名称
  19. 差模干扰/电压/电流/电感/电容与共模干扰/电压/电流/电感/电容的介绍
  20. model java_编程中的 Model 到底是什么?

热门文章

  1. 面试要谈的计算机网络
  2. IDEA 中使用 Big Data Tools 连接大数据组件
  3. IE与非IE浏览器调用PC摄像头拍摄并且上传
  4. FFmpeg循环推流
  5. 你知道管理工作中要远离三只猫吗?
  6. win10 设置定时关机
  7. 针对大数据量的渲染优化库:react-virtual的基本使用
  8. CSDN的文章如何快速转移到微信公众号上
  9. matlab中随机森林实现,随机森林实现 MATLAB
  10. 如何在线赚钱:28 种真正的在线赚钱方式