如何使用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日志并进行多维度分析。
目录
相关文章
|
12天前
|
存储 缓存 监控
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
133 78
|
16天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
52 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
12天前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
67 13
|
1月前
|
Ubuntu Linux 网络安全
linux系统ubuntu中在命令行中打开图形界面的文件夹
在Ubuntu系统中,通过命令行打开图形界面的文件夹是一个高效且实用的操作。无论是使用Nautilus、Dolphin还是Thunar,都可以根据具体桌面环境选择合适的文件管理器。通过上述命令和方法,可以简化日常工作,提高效率。同时,解决权限问题和图形界面问题也能确保操作的顺利进行。掌握这些技巧,可以使Linux操作更加便捷和灵活。
41 3
|
13天前
|
Ubuntu Linux C++
Win10系统上直接使用linux子系统教程(仅需五步!超简单,快速上手)
本文介绍了如何在Windows 10上安装并使用Linux子系统。首先,通过应用商店安装Windows Terminal和Linux系统(如Ubuntu)。接着,在控制面板中启用“适用于Linux的Windows子系统”并重启电脑。最后,在Windows Terminal中选择安装的Linux系统即可开始使用。文中还提供了注意事项和进一步配置的链接。
35 0
|
1月前
|
Linux
在 Linux 系统中,`find` 命令
在 Linux 系统中,`find` 命令
39 1
|
24天前
|
存储 Oracle 安全
服务器数据恢复—LINUX系统删除/格式化的数据恢复流程
Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs) 下删除或者格式化的数据恢复流程和可行性。
|
7月前
|
Linux
Linux MBR扇区故障 引导修复
Linux MBR扇区故障 引导修复
|
Linux Windows
lenovo thinkpad t460s升级bios版本,造成opensuse linux 引导丢失修复
lenovo thinkpad t460s升级bios版本,造成opensuse linux 引导丢失修复 原来的eps分区还在的,只是boot manager中的efi引导选项被清除了。
2165 0