使用 SysRq 对 Linux 实例进行故障排查 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用 SysRq 对 Linux 实例进行故障排查

系统请求 (SysRq) 键(有时称为“magic SysRq”)可用于在 shell 外直接向内核发送命令,无论内核正在执行什么操作,内核都会响应。例如,如果实例已停止响应,则可以使用 SysRq 密钥告诉内核崩溃或重新启动。有关更多信息,请参阅 Wikipedia 中的 Magic SysRq 键

Prerequisites

您必须先授予串行控制台访问权限,然后才能配置和使用 SysRq。有关更多信息,请参阅配置对 EC2 串行控制台的访问

配置 SysRq

要配置 SysRq,请在当前引导周期中启用 SysRq 命令。要使配置永久化,您还可以为后续引导启用 SysRq 命令。

为当前引导周期启用所有 SysRq 命令

  1. 连接到您的实例

  2. 运行以下命令。

    [ec2-user ~]$ sudo sysctl -w kernel.sysrq=1
    注意

    下次重新启动时将会清除此设置。

为后续引导启用所有 SysRq 命令

  1. 创建文件 /etc/sysctl.d/99-sysrq.conf 并在您收藏的编辑器中打开。

    [ec2-user ~]$ sudo vi /etc/sysctl.d/99-sysrq.conf
  2. 添加以下行。

    kernel.sysrq=1
  3. 重启实例以应用更改。

    [ec2-user ~]$ sudo reboot
  4. login 提示符下,输入您之前设置的基于密码的用户的用户名,然后按 Enter 键。

  5. Password 提示符下,输入密码,然后按 Enter 键。

使用 SysRq

您可以在基于 EC2 串行控制台浏览器的客户端中或 SSH 客户端中使用 SysRq 命令。每个客户端发送中断请求的命令都不同。

要使用 SysRq,请根据您正在使用的客户端选择以下程序之一。

Browser-based client

在串行控制台基于浏览器的客户端中使用 SysRq

  1. 连接到实例的串行控制台。

  2. 要发送中断请求,请按 CTRL+0(零)。如果您的键盘支持,还可以使用暂停或中断键发送中断请求。

    [ec2-user ~]$ CTRL+0
  3. 要发出 SysRq 命令,请按键盘上与所需命令对应的键。例如,要显示 SysRq 命令列表,请按 h

    [ec2-user ~]$ h

    h 命令的输出类似于以下内容。

    [ 1169.389495] 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) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r ) sync(s) show-task-states(t) unmount(u) show-blocked-tasks(w) dump-ftrace-buffer(z)
SSH client

在 SSH 客户端中使用 SysRq

  1. 连接到实例的串行控制台。

  2. 要发送中断请求,请按 ~B(波浪号后跟大写 B)。

    [ec2-user ~]$ ~B
  3. 要发出 SysRq 命令,请按键盘上与所需命令对应的键。例如,要显示 SysRq 命令列表,请按 h

    [ec2-user ~]$ h

    h 命令的输出类似于以下内容。

    [ 1169.389495] 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) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r ) sync(s) show-task-states(t) unmount(u) show-blocked-tasks(w) dump-ftrace-buffer(z)
    注意

    您用于发送中断请求的命令可能会有所不同,取决于您正在使用的 SSH 客户端。