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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 如何使用SysRq组合键修复无响应的Linux系统

条件

通常需要有一个可操作的串行控制台,并能将其输出存储到一个文件中。文本格式比图像更受欢迎。如果图像是唯一的方式,如果可能的话,请使用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中。例如:

# echo m > /proc/sysrq-trigger
# echo w > /proc/sysrq-trigger
# echo l > /proc/sysrq-trigger

Copy

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

当系统开始出现问题时,往往需要借助于串行控制台。/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外壳等信息。

参考链接

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1天前
|
Unix Linux Windows
Linux 系统目录结构
这篇文章详细解释了Linux系统目录结构,重点介绍了/etc目录存放系统配置文件,/root为管理员主目录,/usr存放应用程序和共享资源,/var存放日志等变动文件,以及/home、/boot等目录的作用。
Linux 系统目录结构
|
1天前
|
Linux Shell
Linux系统
是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。
|
1天前
|
Ubuntu Java Linux
查看Linux系统中日志文件
查看Linux系统中日志文件
|
1天前
|
Linux
Linux源码阅读笔记17-资源分配及总线系统
Linux源码阅读笔记17-资源分配及总线系统
|
1天前
|
运维 监控 Linux
"熬夜达人揭秘:Linux系统崩溃前夜,如何用这几行代码救局?监控与排查全攻略!"
【8月更文挑战第19天】作为常需熬夜的系统管理员,面对Linux系统问题时,我总结了一套实用的监控与排查方法。通过使用`top`监控CPU使用率、`free`检查内存状况、`iostat`监测磁盘I/O、及`iftop`观察网络流量,结合`ps`、`pmap`和`strace`等工具深入分析,可有效识别并解决系统瓶颈,减少故障处理时间,保障系统稳定运行。
|
1天前
|
存储 安全 Linux
Linux存储安全:系统更新和补丁管理的策略与实践
【8月更文挑战第19天】安全是一个持续的过程,需要不断地评估、更新和改进策略。
3 0
|
1天前
|
NoSQL 数据可视化 Linux
一文教会你如何在Linux系统中使用Docker安装Redis 、以及如何使用可视化工具连接【详细过程+图解】
这篇文章详细介绍了如何在Linux系统中使用Docker安装Redis,并提供了使用可视化工具连接Redis的步骤。内容包括安装Redis镜像、创建外部配置文件、映射文件和端口、启动和测试Redis实例、配置数据持久化存储,以及使用可视化工具连接和操作Redis数据库的过程。
|
3月前
|
Linux
Linux MBR扇区故障 引导修复
Linux MBR扇区故障 引导修复
|
Linux Windows
lenovo thinkpad t460s升级bios版本,造成opensuse linux 引导丢失修复
lenovo thinkpad t460s升级bios版本,造成opensuse linux 引导丢失修复 原来的eps分区还在的,只是boot manager中的efi引导选项被清除了。
2137 0