如何使用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外壳等信息。

参考链接

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
27天前
|
Ubuntu Linux
计算机基础知识:linux系统怎么安装?
在虚拟机软件中创建一个新的虚拟机,并选择相应操作系统类型和硬盘空间大小等参数。将下载的 ISO 镜像文件加载到虚拟机中。启动虚拟机,进入安装界面,并按照步骤进行安装。安装完成后,可以在虚拟机中使用 Linux 系统。
|
13天前
|
缓存 监控 Linux
Linux系统清理缓存(buff/cache)的有效方法。
总结而言,在大多数情形下你不必担心Linux中buffer与cache占用过多内存在影响到其他程序运行;因为当程序请求更多内存在没有足够可用资源时,Linux会自行调整其占有量。只有当你明确知道当前环境与需求并希望立即回收这部分资源给即将运行重负载任务之前才考虑上述方法去主动干预。
211 10
|
17天前
|
安全 Linux 数据安全/隐私保护
为Linux系统的普通账户授予sudo访问权限的过程
完成上述步骤后,你提升的用户就能够使用 `sudo`命令来执行管理员级别的操作,而无需切换到root用户。这是一种更加安全和便捷的权限管理方式,因为它能够留下完整的权限使用记录,并以最小权限的方式工作。需要注意的是,随意授予sudo权限可能会使系统暴露在风险之中,尤其是在用户不了解其所执行命令可能带来的后果的情况下。所以在配置sudo权限时,必须谨慎行事。
138 0
|
27天前
|
Ubuntu Linux 开发者
国产 Linux 发行版再添新成员,CutefishOS 系统简单体验
当然,系统生态构建过程并不简单,不过为了帮助国产操作系统优化生态圈,部分企业也开始用国产操作系统替代 Windows,我们相信肯定会有越来越多的精品软件登录 Linux 平台。
64 0
|
27天前
|
Ubuntu 安全 Linux
Linux系统入门指南:从零开始学习Linux
Shell脚本是一种强大的自动化工具,可以帮助您简化重复的任务或创建复杂的脚本程序。了解Shell脚本的基本语法和常用命令,以及编写和运行Shell脚本的步骤,将使您更高效地处理日常任务。
99 0
|
27天前
|
Ubuntu Linux 图形学
Linux学习之Linux桌面系统有哪些?
Cinnamon:与MATE类似,Cinnamon 拥有 GNOME 和 Unity 等其它桌面环境所没有的种种功能,是高度可定制的桌面环境,不需要任何外部插件、窗口组件和调整工具来定制桌面。
47 0
|
27天前
|
Ubuntu 安全 Linux
十款常用Linux系统介绍
本文不是什么大盘点。市面上有好几百款发行版,每款发行版在某个方面都与众不同。不可能在此全部罗列,本文只罗列了十款最常见的Linux发行版(世界上只有两种人,一种是懂二进制的,另一种是不懂二进制的)。请宣传Linux的魅力或威力。
|
2月前
|
监控 Linux 网络安全
Linux命令大全:从入门到精通
日常使用的linux命令整理
586 13
|
3月前
|
Linux 网络安全 数据安全/隐私保护
使用Linux系统的mount命令挂载远程服务器的文件夹。
如此一来,你就完成了一次从你的Linux发车站到远程服务器文件夹的有趣旅行。在这个技术之旅中,你既探索了新地方,也学到了如何桥接不同系统之间的距离。
353 21