SysRq魔法键的使用

一、SysRq魔法键简介

1.SysRq简介
它能够在系统处于极端环境时响应按键并完成相应的处理。这在大多数时候有用。SysRq 经常被称为 Magic System Request,它被
定义为一系列按键组合。之所以说它神奇,是因为它在系统挂起,大多数服务已无法响应的情况下,还能通过按键组合来完成一系列
预先定义的系统操作。

通过它,不但可以在保证磁盘数据安全的情况下重启一台挂起的服务器,避免数据丢失和重启后长时间的文件系统检查,还可以收集
包括系统内存使用,CPU 任务处理,进程运行状态等系统运行信息,甚至还可能在无需重启的情况下挽回一台已经停止响应的服务器。
到目前为止,我们可见到的大多数 SysRq 推荐用法都是系统挂起后的安全重启,用此方法来避免数据丢失。

在下文中,为描述的简洁,SysRq-<?> 均代表 Alt-SysRq-<?> 或者 echo “?” > /proc/sysrq-trigger。
同时按下Alt和Print Screen键以及相应的字母键发送命令:Ubuntu下,图形界面环境不能使用SysRq,需进入文本虚拟终端环境
(Ctrl+Alt+F1从图形桌面切换到虚拟终端,Alt+F7可切回来),


2.启用和关闭SysRq
首先要确保内核打开了CONFIG_MAGIC_SYSRQ配置项,这样SysRq的底层处理才可用。
暂时启用SysRq:echo "0" >/proc/sys/kernel/sysrq
暂时禁用SysRq:echo "1" >/proc/sys/kernel/sysrq

永久禁用SysRqs:在/etc/sysctl.conf中设置kernel.sysrq = 1
永久启用SysRqs:在/etc/sysctl.conf中设置kernel.sysrq = 0


3.安全重启系统
R-E-I-S-U-B 这个序列的推荐使用方式是:R – 1 秒 – E – 30 秒 – I – 10 秒 – S – 5 秒 – U – 5 秒 – B,而不是一气呵成地按
下这六个键,试想一次正常的 reboot 命令也不是在一瞬间完成的吧。

R - 把键盘设置为 ASCII 模式
E - 向除 init 以外所有进程发送 SIGTERM 信号
I - 向除 init 以外所有进程发送 SIGKILL 信号,与 E 类似,因为 syslogd 本身也被结束,除非 netconsole 或串口记录已打开,
否则连上面的信息都无法捕捉。同时,因为 SIGKILL 是不可捕获的信号,/var/log/messages 里面也不会留下任何线索。
S - 磁盘缓冲区同步,该操作会把磁盘缓冲区的数据回写,以防止数据丢失,通常会有一定延时。在能看到输出的情况下,请等到
” Emergency Sync complete ” 过后再继续后续操作。否则,等十秒钟左右,再进行后续 SysRq 操作。
U - 重新挂载为只读模式,该操作会把磁盘重挂载为只读模式,以防止数据的损坏。与 S 类似,该操作通常也有一定延时。请等到
” Emergency Remount complete ” 出现过后再进行后续操作,或者等候十秒钟再进行后续 SysRq 操作。
B - 立即重启系统,该操作会立即重启系统,比想象中要快。


4.结束进程
SysRq 定义了一组与结束进程相关的序列:E-I-K-F,可以用它们来恢复系统挂起。
E - 向所有进程发送 SIGTERM 信号
I - 向所有进程发送 SIGKILL 信号
K - 结束与当前控制台相关的全部进程,该操作结束了文本控制台下正在运行的 top 程序,以及登录的 shell 。
F - 人为触发 OOM Killer,OOM Killer 将根据各进程的内存处理情况选取最合适的“凶手”进程,并向其发送 SIGKILL 信号,中止其运行。
SysRq 输出包括运行栈,内存使用信息,和“凶手”进程的标识信息。在实际情况中,除非可以确认是内存使用问题,尽量避免使用这
个组合键。因为 OOM-Killer 自动挑选的进程不一定是真正的“凶手”。相比之下,SysRq-K 结束的进程更有针对性。


3.获取系统信息
M - 打印内存使用信息,该操作显示了 cpu 相关分区信息,全局页使用情况,分区页使用情况,分区 slab 使用情况,页缓存使用情况,
swap 使用情况等等。
P - 打印当前 CPU 寄存器信息,该操作显示了正在执行的进程名,运行函数,寄存器上下文,以及程序的调用栈回溯等信息。这对于分析
死锁引起的系统挂起有着非常重要的作用。一般来说我们会多采几次重复样本,以便更加准确的做出系统运行状态的判断!
T - 打印进程列表,该操作显示了进程列表,包含各进程的名称,进程 PID,父 PID 及兄弟 PID 等相关信息,以及进程的运行状态。
对于正在运行中的进程(R),没有太多的信息。对于处于睡眠状态的进程,列出其调用栈回溯信息,以便进行调试跟踪。
W - 打印 CPU 信息,该操作显示了每 CPU 的寄存器上下文和程序调用栈回溯信息。
H - 帮助,0--8 - 更改 console_loglevel,Alt-SysRq-6 的输出,它等同于 echo "6" > /proc/sys/kernel/printk 操作,
将console_loglevel 设置为 6 。
C - 触发 Crashdump在大多数情况下,我们通过前面的方法即可完成对系统挂起的基本诊断和数据收集。但是在一些特殊情况下,我们仍然
需要一份完整的 crashdump 。毕竟 crashdump 包含比 SysRq – MPT 更多的信息,以利用后期做故障分析。从栈回溯信息上看,内核就是写一个0地址。

N - 降低实时任务运行优化级,这对于由实时任务消耗 CPU 引起的系统挂起会起到立竿见影的作用。
O - 关机,该操作会立即关机,一般很少使用。在必要的情况下,也推荐跟随 S – U 一起使用。

 

二、补充

1. 查看帮助

# echo ? > /proc/sysrq-trigger
# dmesg -c
[ 3168.591032] (3)[12902:sh]sysrq: SysRq : HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) sync(s) show-task-states(t) unmount(u) show-blocked-tasks(w) dump-ftrace-buffer(z)

 

注:msm-4.14

 

 

 

参考:http://www.baidu.com/link?url=dDrEfDXtmLeBMPLtR-UF-ZGNhHwGkz0RRaOZkdqa9jBqVryPkHHv7quJqFBvJqeeEXZPQPvKCf8nDMOd-8mUjq&wd=&eqid=e5790bd10001a856000000065b17fe30

posted on 2018-06-07 00:51  Hello-World3  阅读(2334)  评论(0编辑  收藏  举报

导航