如何使用SysRq组合键修复无响应的Linux系统

2023-02-22 23:33:17 浏览数 (2)

条件

通常需要有一个可操作的串行控制台,并能将其输出存储到一个文件中。文本格式比图像更受欢迎。如果图像是唯一的方式,如果可能的话,请使用OCR软件将其内容转换为文本。只有在内核日志信息没有被存储到磁盘的情况下才需要串行控制台,例如由于rsyslogd没有运行,或者journald只是将日志记录到内存而不是磁盘上。

如何使用SysRq组合键

触发的动作取决于SysRq组合键中使用的命令键。对调试最有用的命令键是。

  • "t "将系统中每个进程的堆栈跟踪打印到内核日志中。这个输出允许人们看到所有进程在那一刻在做什么。在一个繁忙的、完全启动的系统中,输出可能有数万行之多。
  • "l "将当前运行在CPU上的所有进程的堆栈痕迹打印到内核日志中。
  • "w"(AZERTY键盘上的 "z")将所有在不间断睡眠中被阻塞的进程的堆栈痕迹打印到内核日志中。这个命令键是用来调试I/O问题的。输出结果应该比 "t "命令键短得多,因为不是所有进程都被打印出来。
  • "m" ("," on AZERTY) 将当前的内存信息打印到内核日志中。如果怀疑有一个与内存有关的问题,这很有用。
  • "c" - 将崩溃系统。如果kdump被启用,内核转储将被存储。

当获得调试数据时,最好反复发送命令键(除了 "c"),命令键之间至少间隔几秒钟。这样,就可以捕捉到系统在不同时间点的状态。

还有一些命令键用于以尽可能小的影响重新启动机器。

  • "r" - 关闭键盘原始模式,并将其设置为XLATE。
  • "s" - 将尝试同步所有安装的文件系统。这减少了数据丢失的机会。
  • "e" - 向所有进程发送一个SIGTERM,除了init。
  • "i" - 向所有进程发送一个SIGKILL,除了init。
  • "u" - 将尝试重新挂载所有挂载的文件系统为只读。
  • "b" - 将立即重启你的系统(不同步或卸载你的磁盘)。

有一个记忆法可以记住上述命令键的顺序:Raising Skinny Elephants Is Utterly Boring.

不同连接方式下触发SysRq

台式机(x86架构)

如果PS2或USB键盘连接到机器上,通过按下Alt键和Print Screen/SysRq键以及一个命令键来向内核发送SysRq组合键,例如Alt-SysRq-m来获取内存信息。

使用SSH的服务器。

用ssh登录到机器上。要向内核发送SysRq密钥,只需以root身份将命令密钥写入/proc/sysrq-trigger中。例如:

代码语言:javascript复制
# echo m > /proc/sysrq-trigger
# echo w > /proc/sysrq-trigger
# echo l > /proc/sysrq-trigger

只使用串行控制台的服务器。

当系统开始出现问题时,往往需要借助于串行控制台。/proc/sysrq-trigger文件可以用来发送SysRq键,以防仍然可以登录系统。否则,Sysrq键也可以通过串行线发送,方法是在5秒内发送一个break,然后再发送一个命令键。

注意:你的终端类型将定义如何 "发送break",例如:在ipmitool中,break字符是"~B"(tilde后面是大写的B)

Azure

在Azure上,SysRq键可以从虚拟机的串行控制台的GUI界面发送。要进入控制台,在Azure门户上的机器菜单中选择 "支持 故障排除/串行控制台"。控制台的顶部栏有一个用于发送SysRq密钥的工具。

使用SysRq组合键修复抖动问题

  1. 同时按键盘上的Ctrl Alt Fn键。
  2. 用另一只手按SysRq键。如果你的键盘上没有SysRq标签,请按Prtscn键。
  3. 释放Ctrl Alt Fn键,同时仍按住SysRq键。
  4. 按照这个顺序按以下键。R,E,I,S,U,B。
  5. 松开所有的键。

这样做之后,等待几秒钟,你的机器就会停止抖动。上述的组合键在你的系统上执行了以下任务。

  • R:将键盘切换到Raw模式。
  • E:向除init以外的所有进程发送SIGTERM信号。这个信号负责指定进程的终止。
  • I:向除init以外的所有进程发送SIGKILL信号。
  • S: 同步当前挂载在系统上的所有文件系统。
  • U: 以只读模式重新挂载文件系统。
  • B: 重新启动系统。

修复无反应的Linux系统

当内存不足时,一些特定的进程会使计算机的工作陷入瓶颈。在这样的情况下,SysRq组合键可能会派上用场。另外,你也可以重启系统,立即杀死可能导致该问题的进程。但这并不是一个可行的选择。

你也可以使用ps命令监控你的Linux系统上的运行进程。该命令将输出诸如进程ID、按CPU分配给进程的时间、当前的TTY外壳等信息。

参考链接

  • https://www.suse.com/support/kb/doc/?id=000020294
  • https://linux-tips.us/what-you-need-to-know-about-linuxs-magic-sysrq-key/

0 人点赞