Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
使用 SysRq 对 Linux 实例进行故障排查
系统请求 (SysRq) 键(有时称为“magic SysRq”)可用于在 Shell 外直接向内核发送命令,无论内核正在执行什么操作,内核都会响应。例如,如果实例已停止响应,则可以使用 SysRq 密钥告诉内核崩溃或重新启动。有关更多信息,请参阅 Wikipedia 中的 Magic SysRq 键。
先决条件
您必须先授予串行控制台访问权限,然后才能配置和使用 SysRq。有关更多信息,请参阅配置对 EC2 Serial Console 的访问。
要配置 SysRq,请在当前引导周期中启用 SysRq 命令。要使配置永久化,您还可以为后续引导启用 SysRq 命令。
为当前引导周期启用所有 SysRq 命令
-
连接到您的实例。
-
运行以下命令。
[ec2-user ~]$ sudo sysctl -w kernel.sysrq=1
为后续引导启用所有 SysRq 命令
-
创建文件 /etc/sysctl.d/99-sysrq.conf 并在您收藏的编辑器中打开。
[ec2-user ~]$ sudo vi /etc/sysctl.d/99-sysrq.conf
-
添加以下行。
kernel.sysrq=1
-
重启实例以应用更改。
[ec2-user ~]$ sudo reboot
-
在 login 提示符下,输入您之前设置的基于密码的用户的用户名,然后按 Enter 键。
-
在 Password 提示符下,输入密码,然后按 Enter 键。
使用 SysRq
您可以在基于 EC2 Serial Console 浏览器的客户端中或 SSH 客户端中使用 SysRq 命令。每个客户端发送中断请求的命令都不同。
要使用 SysRq,请根据您正在使用的客户端选择以下程序之一。
- Browser-based client
-
在串行控制台基于浏览器的客户端中使用 SysRq
-
连接到实例的串行控制台。
-
要发送中断请求,请按 CTRL+0(零)。如果您的键盘支持,还可以使用暂停或中断键发送中断请求。
[ec2-user ~]$ CTRL+0
-
要发出 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
-
连接到实例的串行控制台。
-
要发送中断请求,请按 ~B(波浪号后跟大写 B)。
[ec2-user ~]$ ~B
-
要发出 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 客户端。