通过sysrq打印linux内核信息
来源:互联网 发布:数据产品质量的承诺 编辑:程序博客网 时间:2024/06/14 20:18
在linux系统下,我们可能会遇到系统某个命令hang住的情况,通常情况下,我们会查看/proc/pid/wchan文件,看看进程处于什么状况,然后进一步查看系统日志或者使用strace跟踪命令执行时的系统调用等等方法来分析问题。我们知道命令hang,一般问题都出在内核里, 如果我们能根据自己的需要打印内核的信息,可能会事半功倍,很快定位到问题。幸运的是linux真的有提供这样的方式,就是通过SysRq,今天在这里我就介绍一下。
1. SysRq的启用与关闭
要想启用SysRq, 需要在配置内核时设置Magic SysRq key (CONFIG_MAGIC_SYSRQ)为Y. 对于支持SysRq的内核, /proc/sys/kernel/sysrq控制SysRq的启用与否. 如果/proc/sys/kernel/sysrq内容为0, 则SysRq被禁用; 如果/proc/sys/kernel/sysrq内容为1, 则SysRq被启用. 关于/proc/sys/kernel/sysrq的更多描述, 请参考<Kernel Source>/Documentation/sysrq.txt
https://www.kernel.org/doc/Documentation/sysrq.txt
可通过运行命令echo "0" >/proc/sys/kernel/sysrq和echo "1" >/proc/sys/kernel/sysrq暂时启用或禁用SysRq. 如果需要永久启用或者禁用SysRqs, 则可在/etc/sysctl.conf中设置kernel.sysrq = 1 (启用SsyRq)或kernel.sysrq = 0 (禁用SysRq)。另外,/proc/sys/kernel/sysrq除了可以用来启用和禁用SysRq之外,还可以控制以下内容:
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
2. SysRq组合键的功能说明
键名 功能说明
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信息。
3. SysRq功能键的使用
这里介绍最通用的方式,即通过/proc/sysrq-trigger,具体用法是向该文件写入相应的功能字符。
比如接着上面的hang的问题,就可以,
$ echo 'w' > /proc/sysrq-trigger
$ dmesg
比如你想查看当前系统中所有线程的信息,你可以,
$ echo 't' > /proc/sysrq-trigger
$ dmesg
4. 总结
SysRq的功能非常强大,是debug linux内核问题时经常会用到的工具、方法。
- 通过sysrq打印linux内核信息
- 打印linux内核信息
- Linux内核开机打印信息
- Linux内核---5.Makefile显示打印信息
- linux 内核定时器打印进程信息
- 禁止内核打印信息
- 内核打印信息
- 内核通用打印信息
- 去掉linux内核打印信息的一种方法
- linux查看内核启动过程的打印信息
- 去掉linux内核打印信息的一种方法
- linux内核中打印栈回溯信息 - dump_stack()函数分析
- linux内核中打印栈回溯信息 - dump_stack()函数分析
- linux内核最低等级打印信息如何打开?
- 如何查看Linux内核中printk打印的信息?
- 通过打印学习Linux内核之sysfs(0)
- 通过打印学习Linux内核之sysfs(1)
- Linux magic sysrq key
- EL表达式的使用
- C语言基础之分支结构—if...else—elseif—switch...case
- Java语言基础1--专题课 递归
- 使用Zend_Form_Element_File 获取文件
- 关于c++的成员初始化列表
- 通过sysrq打印linux内核信息
- 【Python】Webpy 源码学习(转)
- volley源码解析
- qt 工作实践经验
- 集合类
- 【LintCode】 Linked List Cycle 带环链表
- 如果我有钱了
- jQuery提取元数据Metadata插件
- 深度搜索的应用----无向图的连通性