SysRq键简介
SysRq键是一个魔术案件,只要在内核没有完全卡死的情况下,内核都会相应SysRq 键的输入,使用这些组合键都可以搜集包括系统内存使用、CPU任务处理、进程运行状态等系统运行信息。
配置
内核配置选项中要使能CONFIG_MAGIC_SYSRQ选项,这样系统启动之后,会生成/proc/sysrq-trigger节点用于调试。
修改/etc/sysctl.conf启动SysRq。
kernel.sysrq=1
执行下列命令,使修改生效。
sysctl-p
也可以通过写echo "number" >/proc/sys/kernel/sysrq节点临时使能sysrq功能。
写入不同的值使能不同的功能:
值 | 描述/说明 |
---|---|
0 | 完全禁用 sysrq |
1 | 启用 sysrq 的所有功能 |
2 | 允许控制终端日志级别 |
4 | 允许控制终端日志级别 |
8 | 允许调试进程dump |
16 | 允许执行sync命令 |
32 | 允许重新挂载文件系统为之读 |
64 | 允许发送信号给进程(term,kill,oom-kill) |
128 | 允许重启/关机 |
256 | 允许调整实时任务的优先级 |
如何使用SysRq
echo>/proc/sysrq-trigger
命令键
命令键 | 功能 |
---|---|
b | 将立即重启系统,不会同步或者卸载磁盘。 |
c | 将执行系统 crash,如果配置了系统 crashdump,将执行 crashdump。 |
d | 显示所有持有的锁。 |
e | 发送 SIGTERM 信号给所有进程,除了 init 进程。 |
f | 将调用 oom killer 杀掉一个过度占用内存的进程,如果什么任务都没杀, 也不会 panic。 |
g | kgdb 使用(内核调试器)。 |
h | 将会显示帮助。(实际上除了这里列举的键,其他的都将显示帮助, 但是 h 容易记住):-) |
i | 发送 SIGKILL 给所有进程,除了 init 进程。 |
j | 强制性的 “解冻它” - 用于被 FIFREEZE ioctl 操作冻住的文件系统。 |
k | 安全访问秘钥(SAK)杀掉在当前虚拟控制台的所有程序,注意:参考 下面 SAK 节重要论述。 |
l | 显示所有活动 cpu 的栈回溯。 |
m | 将导出当前内存信息到你的控制台。 |
n | 用于使所有实时任务变成普通任务。 |
o | 将关闭系统(如果配置和支持的话)。 |
p | 将导出当前寄存器和标志位到控制台。 |
q | 将导出每个 cpu 上所有已装备的高精度定时器(不是完整的 time_list 文件显示的 timers)和所有时钟事件设备的详细信息。 |
r | 关闭键盘的原始模式,设置为转换模式。 |
s | 将尝试同步所有的已挂载文件系统。 |
t | 将导出当前所有任务列表和它们的信息到控制台。 |
u | 将尝试重新挂载已挂载文件系统为只读。 |
v | 强制恢复帧缓存控制台。 |
v | 触发 ETM 缓存导出 [ARM 架构特有] |
w | 导出处于不可中断状态(阻塞)的任务。 |
x | 在 ppc/powerpc 架构上用于 xmon 接口。在 sparc64 架构上用于显示全局的 PMU(性能监控单元)寄存器。在 MIPS 架构上导出所有的 tlb 条目。 |
y | 显示全局 cpu 寄存器 [SPARC-64 架构特有] |
z | 导出 ftrace 缓存信息 |
0-9 | 设置控制台日志级别,该级别控制什么样的内核信息将被打印到你的 控制台。(比如 0 ,将使得只有紧急信息,像 PANICs or OOPSes 才能到你的控制台。) |
打印内存使用信息
root@firefly:~#echom>/proc/sysrq-trigger [3100.196187]sysrq:SysRq:ShowMemory [3100.196675]Mem-Info: [3100.196931]active_anon:48062inactive_anon:2987isolated_anon:0 [3100.196931]active_file:40449inactive_file:53540isolated_file:0 [3100.196931]unevictable:0dirty:22writeback:0unstable:0 [3100.196931]slab_reclaimable:10518slab_unreclaimable:6599 [3100.196931]mapped:44843shmem:3710pagetables:1568bounce:0 [3100.196931]free:810482free_pcp:497free_cma:0 [3100.199998]DMAfree:3241928kBmin:7920kBlow:9900kBhigh:11880kBactive_anon:192248kBinactive_anon:11948kBactive_file:161796kBinactive_file:214160kBunevictable:0kBisolated(anon):0kBisolated(file):0kBpresent:4030464kBmanaged:3933592kBmlocked:0kBdirty:88kBwriteback:0kBmapped:179372kBshmem:14840kBslab_reclaimable:42072kBslab_unreclaimable:26396kBkernel_stack:5792kBpagetables:6272kBunstable:0kBbounce:0kBfree_pcp:1988kBlocal_pcp:224kBfree_cma:0kBwriteback_tmp:0kBpages_scanned:0all_unreclaimable?no [3100.204031]lowmem_reserve[]:000 [3100.204414]DMA:272*4kB(U)95*8kB(UM)177*16kB(UME)88*32kB(UME)50*64kB(UM)32*128kB(UM)6*256kB(UM)4*512kB(UM)2*1024kB(M)3*2048kB(UME)785*4096kB(M)=3241928kB [3100.206208]Node0hugepages_total=0hugepages_free=0hugepages_surp=0hugepages_size=2048kB [3100.206990]97710totalpagecachepages [3100.207345]0pagesinswapcache [3100.207679]Swapcachestats:add0,delete0,find0/0 [3100.208156]Freeswap=0kB [3100.208425]Totalswap=0kB [3100.208721]1007616pagesRAM [3100.209003]0pagesHighMem/MovableOnly [3100.209352]24218pagesreserved root@firefly:~#
打印进程列表
root@firefly:~#echot>/proc/sysrq-trigger [3357.426399]sysrq:SysRq:ShowState [3357.426902]Calltrace: [3357.427155][]__switch_to+0x94/0xbc [3357.427759][ ]__schedule+0x334/0x65c [3357.428249][ ]schedule+0x70/0x84 [3357.428762][ ]schedule_hrtimeout_range_clock+0x54/0xd8 [3357.429390][ ]schedule_hrtimeout_range+0x38/0x48 [3357.430004][ ]SyS_epoll_wait+0x2c0/0x334 [3357.430515][ ]SyS_epoll_pwait+0xb4/0x104 [3357.431057][ ]el0_svc_naked+0x24/0x28 [3357.431576]Calltrace: [3359.224688]runnabletasks: [3359.224688]taskPIDtree-keyswitchespriowait-timesum-execsum-sleep [3359.224688]---------------------------------------------------------------------------------------------------------- [3359.226942]watchdog/531-8.99037584200.01041833.6399740.011083/ [3359.227935]migration/5320.0000001100.0064170.7036260.011083/ ............................... [3359.280491]rsyslogd62012549.402602311203.95971013.0672493000146.370846/ [3359.281483]gmain6492780.83708041201.4978750.23479142.333083/ [3359.282473]gdbus6536084.55846323512011.84550588.1433775894.875470/ [3359.283464]probing-thread6572798.85165811200.1712090.0463750.000000/ [3359.284458]gmain66613129.7470178421201.635792160.937875............................... [3359.347891]kbase_event10875737.99119021000.0000000.0154160.022167/ [3359.348888]kworker/5:0141512729.712418635212094.661328379.266952300531.917073/ [3359.349880]kworker/5:1142113139.623478459212040.804756269.058278218093.165092/ [3359.350919]
打印 CPU 信息
root@firefly:~#echow>/proc/sysrq-trigger [3461.098259]sysrq:SysRq:ShowBlockedState [3461.099495]SchedDebugVersion:v0.11,4.4.194+#15 [3461.099987]ktime:3460974.551474 [3461.100559]sched_clk:3461099.486338 [3461.101163]cpu_clk:3461099.486629 [3461.101733]jiffies:4298128273 [3461.102303] [3461.102457]sysctl_sched ............................... [3461.106084] [3461.476753]taskPIDtree-keyswitchespriowait-timesum-execsum-sleep [3461.476753]---------------------------------------------------------------------------------------------------------- [3461.479007]watchdog/531-8.99037586800.01041834.6398090.011083/ [3461.479999]migration/5320.0000001100.0064170.7036260.011083/ [3461.480990]ksoftirqd/53312976.65500228212031.2629109.5779263226896.156313/ .................... [3461.598951]gdbus9815621.0432456312010.4294157.925751240.024166/ [3461.599945]kbase_event10875737.99119021000.0000000.0154160.022167/ [3461.600943]kworker/5:1142113242.484431632412056.331917371.919231300578.331580/ [3461.601934]kworker/5:0142413267.1288014161203.93226125.07966219671.560460/ [3461.602964]
显示所有活动 cpu 的栈回溯
root@firefly:~#echol>/proc/sysrq-trigger [3602.003162]sysrq:SysRq:ShowbacktraceofallactiveCPUs [3602.003919]Calltrace: [3602.004175][]dump_backtrace+0x0/0x220 root@firefly:~#[3602.004675][ ]show_stack+0x24/0x30 [3602.005233][ ]showacpu+0x68/0x84 [3602.005688][ ]flush_smp_call_function_queue+0x84/0x134 [3602.006303][ ]generic_smp_call_function_single_interrupt+0x18/0x20 [3602.007007][ ]handle_IPI+0x19c/0x260 [3602.007490][ ]gic_handle_irq+0x12c/0x184 [3602.007995]Exceptionstack(0xffffffc0f2f1fd90to0xffffffc0f2f1fec0) [3602.008580]fd80:00000000000000000000000000000003 [3602.009284]fda0:00000040ee976000000000000000002000ffffffffffffff0000001425865f85 [3602.009988]fdc0:000000000004b382000000000000000300000032b5593519ffffff8008081800 [3602.010691]fde0:000000000000100000000000000000000000000034d5d91d00000040ee976000 [3602.011394]fe00:ffffffc0f2f0a880000000000000000000000000000000000000000000000000 [3602.012098]fe20:0000000030d0080000000346a09ab4640000000000000002ffffffc00a4bac00 [3602.012801]fe40:ffffff80097ace1800000000000000010000034697fd8dddffffff800974e488 [3602.013504]fe60:0000000001ab400000000000010f82440000000000000000ffffffc0f2f1fec0 [3602.014209]fe80:ffffff8008b9eb10ffffffc0f2f1fec0ffffff8008b9eb140000000060000145 [3602.014912]fea0:ffffffc0f2f1fec0ffffff8008b9eb10ffffffffffffffff0000000000000002 [3602.015615][ ]el1_irq+0xb4/0x140 [3602.016070][ ]cpuidle_enter_state+0x1cc/0x25c [3602.016624][ ]cpuidle_enter+0x34/0x44 [3602.017112][ ]call_cpuidle+0x6c/0x74 [3602.017598][ ]cpu_startup_entry+0x2ac/0x2bc [3602.018128][ ]secondary_start_kernel+0x190/0x1bc [3602.018700][<00000000010f8188>]0x10f8188
触发 Crashdump
root@firefly:~#echoc>/proc/sysrq-trigger [3635.905960]sysrq:SysRq:Triggeracrash [3635.906476]UnabletohandlekernelNULLpointerdereferenceatvirtualaddress00000000 [3635.907201]pgd=ffffffc0d4a3e000 [3635.907640][00000000]*pgd=0000000000000000,*pud=0000000000000000 [3635.908305]Internalerror:Oops:96000045[#1]SMP .............................................................. [3648.331820]Exceptionstack(0xffffffc0cd8cbb30to0xffffffc0cd8cbc60) [3648.332405]bb20:ffffff800967ff680000008000000000 [3648.333108]bb40:ffffffc0cd8cbd00ffffff80085bb538000000000000000f0000000000000000 [3648.333811]bb60:ffffff80097f72f80000000000000002ffffffc0cd8cbb90000000030003c018 [3648.334514]bb80:00000000000000c30000000100000000ffffffc0cd8cbc30ffffff800810d674 [3648.335218]bba0:ffffffc0cd8cbc90ffffff80092b55d1ffffff80095fa0000000000000000006 [3648.335921]bbc0:0000000000000063000000000000000000000000000000010000000000000000 [3648.336623]bbe0:ffffffc0f7ee8320000000000000000000000000000000000000000000000000 [3648.337327]bc00:0000000000000010ffffff800965ead8ffffff80084783987f7f7f7f7f7f7f7f [3648.338029]bc20:71277660716d73ff7f7f7f7f7f7f7f7f01010101010101010000000000000000 [3648.338733]bc40:0ffffffffffffffe0000000000000000ffffff80081e5cb80000007f8147b8c8 [3648.339434][]el1_da+0x24/0x8c [3648.339873][ ]__handle_sysrq+0xa0/0x14c [3648.340379][ ]write_sysrq_trigger+0x5c/0x74 [3648.340911][ ]proc_reg_write+0xa8/0xcc [3648.341406][ ]__vfs_write+0x48/0xe8 [3648.341877][ ]vfs_write+0xa8/0x15c [3648.342338][ ]SyS_write+0x5c/0xb0 [3648.342798][ ]el0_svc_naked+0x24/0x28
总结
SysRq 在处理系统挂起时安全重启方面已经比较完善了。
审核编辑:汤梓红
-
内核
+关注
关注
3文章
1372浏览量
40276 -
cpu
+关注
关注
68文章
10854浏览量
211574 -
内存
+关注
关注
8文章
3019浏览量
74003 -
调试
+关注
关注
7文章
578浏览量
33923
原文标题:【调试】sysRq键使用方法
文章出处:【微信号:嵌入式与Linux那些事,微信公众号:嵌入式与Linux那些事】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论