使用 SysRq 查看系统信息

使用 SysRq 查看系统信息

Qidi 2017.08.31 (Markdown & Haroopad)


前言:因为看到有同事使用了 SysRq 的技巧进行 debug,虽然我目前还没有使用过,但为了便于以后使用也为了备忘,所以在这里简要记录一下。更详细的说明可以阅读文末所列参考文章。


1、SysRq 是什么

  在某些键盘上我们可以看到 SysRq 键,通过按下这个键和其它字母的组合,我们可以在系统挂起时仍然响应某些命令,从而确保系统能正确保存好数据并关机或重启。在 2.5.64 版本后的 Linux 系统中,在系统宕机时我们还可以向 /proc/sysrq-trigger 节点写入一些命令来使计算机实现前述操作。


2、查看 SysRq 帮助信息

  向 /proc/sysrq-trigger 节点写入任何未定义的内容都会让 SysRq 打印出帮助信息。因为预定义的命令都是单字符或数字,所以我们可以执行如下命令来查看可以使用的命令说明:

# echo help > /proc/sysrq-trigger

  我的平台所使用的 Linux 内核版本为 4.9,在其上执行上述命令后可以看到以下打印:

[  197.237795@2] sysrq: 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) 

  括号中的字母或数字就是我们可以写入节点的内容,也是对应各命令的简称。


3、常用命令

  有一些命令是我们常用的,这里单独罗列一下。

3.1、查看内存使用情况

  实际工作中排查问题时我们可能会经常查看设备的内存使用情况。可以使用下面命令打印设备上的内存使用信息:

# echo m > /proc

  在我的平台上该命令的执行结果如下:

[  615.461924] sysrq: SysRq : Show Memory
[  615.462218] Mem-Info:
[  615.462369] active_anon:90892 inactive_anon:3708 isolated_anon:0\x0a active_file:153787 inactive_file:143068 isolated_file:0\x0a unevictable:934 dirty:8 writeback:0 unstable:0\x0a slab_reclaimable:10940 slab_unreclaimable:12460\x0a mapped:127077 shmem:2319 pagetables:6891 bounce:0\x0a driver_cma:22640 free:26472 free_pcp:660 free_cma:7205
[  615.462514] Node 0 active_anon:363568kB inactive_anon:14832kB active_file:615148kB inactive_file:572272kB unevictable:3736kB isolated(anon):0kB isolated(file):0kB mapped:508308kB dirty:32kB writeback:0kB shmem:9276kB writeback_tmp:0kB unstable:0kB pages_scanned:0 all_unreclaimable? no
[  615.462695] DMA free:105888kB min:4980kB low:6528kB high:8076kB active_anon:363568kB inactive_anon:14832kB active_file:615148kB inactive_file:572272kB unevictable:3736kB writepending:32kB present:2096128kB managed:2040096kB mlocked:256kB slab_reclaimable:43760kB slab_unreclaimable:49840kB kernel_stack:19616kB pagetables:27564kB bounce:0kB free_pcp:2640kB local_pcp:724kB free_unmovable:11308kB free_movable:64072kB free_reclaimable:1072kB free_highatomic:616kB free_isolate:0kB free_cma:28820kB
[  615.462740] lowmem_reserve[]: 0 0 0
[  615.462959] DMA: 5070*4kB (UMEHC) 2373*8kB (UMEHC) 1344*16kB (UMEHC) 520*32kB (UMEHC) 199*64kB (UMEHC) 51*128kB (UMEHC) 12*256kB (UMHC) 4*512kB (UM) 0*1024kB 0*2048kB 1*4096kB (U) = 105888kB
[  615.464658] 300033 total pagecache pages
[  615.464721] 0 pages in swap cache
[  615.464781] Swap cache stats: add 0, delete 0, find 0/0
[  615.464832] Free swap  = 511996kB
[  615.464881] Total swap = 511996kB
[  615.464933] 524032 pages RAM
[  615.464983] 0 pages HighMem/MovableOnly
[  615.465033] 14008 pages reserved
[  615.465083] 120832 pages cma reserved

3.2、组合命令

  系统挂起时,一个可以保证数据安全的方式是使用 SysRq 命令序列 R-E-I-S-U-B 来重启计算机。各命令之间的等待时间为 R – 1 秒 – E – 30 秒 – I – 10 秒 – S – 5 秒 – U – 5 秒 – B


4、参考资料

[1] 《利用 SysRq 键排除和诊断系统故障》

你可能感兴趣的:(Linux)