linux调试内核工具实证记录—sysrq-trigger

概述

/proc/sysrq-triggerLinux 内核提供的一种强大的调试和故障排除工具,允许用户通过写入特定命令来触发系统请求(SysRq)功能,类似Windows系统卡了之后我们通常会通过ctrl+alt+delete按键来进行任务管理的操作。以下是在Ubuntu 18.04.6 LTS版本的系统上对它进行的实证,具体的执行结果需结合您自己的结果,仅供参考:

基本功能

/proc/sysrq-trigger 提供了与系统进行低级别交互的方法,通常用于系统恢复和调试任务。通过它,用户可以在没有物理键盘的情况下,通过命令行实现各种 SysRq 操作。

使用方法

  1. 确保 SysRq 功能已启用

    查看 SysRq 功能是否启用,运行 cat /proc/sys/kernel/sysrq,若输出为非0则已启用;若为 0,可通过 echo 1 | sudo tee /proc/sys/kernel/sysrq 启用。/proc/sys/kernel/sysrq数值的含义如下:

    bit号含义
    1(0x1)允许的 sysrq 功能的位掩码
    2(0x2)启用对控制台日志级别的控制
    4(0x4)启用对键盘的控制(如 SAK、unraw)
    8(0x8)启用调试转储(例如进程等的调试转储)
    16(0x10)启用同步命令
    32(0x20)启用重新只读挂载
    64(0x40)启用向进程发送信号(如 term、kill、oom-kill)
    128 (0x80)允许重启 / 关机
    256 (0x100)允许对所有实时任务进行调整优先级

    为使设置在重启后保持,可在 /etc/sysctl.conf 文件中添加 kernel.sysrq = 1,然后运行 sudo sysctl -p 使更改生效。

  2. 触发 SysRq 命令:使用 echo 命令将特定命令写入 /proc/sysrq-trigger 来触发相应的 SysRq 功能。例如,echo m | sudo tee /proc/sysrq-trigger 可将当前内存信息 dump 到终端。

使用实例详细说明

1.显示帮助信息(h)

  • 命令
echo h | sudo tee /proc/sysrq-trigger
  • 示例

在这里插入图片描述

帮助信息(HELP)详细说明如下表:

命令功能使用场景
number(0~9)设置控制台日志级别,控制哪些内核消息将打印到控制台。(例如,“0”将使只有紧急消息如 PANIC 或 OOPS 才能打印到控制台)需要控制内核消息输出的详细程度时使用,例如在问题排查、调试等过程中
b立即重启机器,不会将缓冲区同步到硬盘,也不会卸载已挂载的硬盘系统处于严重故障状态,需要快速重启
c使系统崩溃,如果配置了 crashdump,崩溃后会生成 dump 文件用于内核调试或故障分析时,需要触发系统崩溃来生成 dump 文件
e向系统中除 init 外的所有进程发出 SIGTERM 信号系统需要重启或关闭,但某些进程无法正常终止时
f调用 oom_kill 杀死内存的 hog 进程系统内存耗尽,导致系统运行缓慢或无法正常工作时
h显示帮助信息查看支持的命令
i向系统中除 init 外的所有进程发出 SIGKILL 信号系统需要重启或关闭,但某些进程无法通过 SIGTERM 信号终止时
j强制解冻被 FIFREEZE ioctl 冻结的文件系统文件系统被 FIFREEZE ioctl 冻结,需要手动解冻时
k杀死所有当前虚拟控制台中的程当某个虚拟控制台被恶意程序占用时,可用于清除该控制台上的程序
l显示现在所有活动 cpu 的堆栈用于内核调试,分析系统中各 CPU 的运行状态
m将当前内存信息 dump 到终端需要查看当前内存使用情况,用于故障排查或性能分析时
n用来使实时任务可以设置 nice 值用于实时任务的调度管理,调整实时任务的优先级
o关闭系统系统需要紧急关闭时
p将寄存器和 flags dump 到终端用于内核调试,查看当前 CPU 寄存器和标志的状态
q显示所有定时器用于分析系统中定时器的运行情况,帮助调试和优化定时器相关的代码
r关闭键盘的 raw 模式,设置为 XLATE 模式键盘处于 raw 模式时,可能无法正常响应某些输入,此时可用于恢复键盘的正常模式
s将尝试同步所有已挂载的文件系统在系统重启或关闭前,确保所有数据都已写入磁盘
t将当前任务的列表和他们信息输出到终端用于查看系统中当前的进程状态,帮助调试和分析系统性能问题
u强制卸载文件系统文件系统处于不正常状态时,用于强制卸载
w显示被阻塞的任务用于分析系统中被阻塞的进程,帮助排查死锁等问题
z转储 ftrace 缓冲区的内容用于分析内核的动态跟踪信息,帮助调试内核性能问题

2.日志等级loglevel (0-9)

  • 功能描述:用于调整内核的打印级别,设置内核消息的日志级别。
  • 使用场景:当需要控制内核消息输出的详细程度时使用,例如在问题排查、调试等过程中。
  • 命令示例echo 8 | sudo tee /proc/sysrq-trigger(将打印级别设置为 8,显示所有信息)

在这里插入图片描述

由上可知日志级别最终设置到/proc/sys/kernel/printk中的第一个值 <console_loglevel> 控制当前控制台的日志级别,只有高于或等于此级别的日志才会被输出到控制台 。级别的具体含义如下表:

级别含义说明
0KERN_EMERG紧急情况,系统可能不可用。
1KERN_ALERT必须立即采取行动的情况。
2KERN_CRIT严重错误,可能导致系统崩溃。
3KERN_ERR普通错误,例如设备错误或资源耗尽。
4KERN_WARNING警告信息,显示潜在的问题。
5KERN_NOTICE通知信息,通常用于正常但重要的事件。
6KERN_INFO信息性消息,提供有关系统状态的信息。
7KERN_DEBUG调试信息,用于开发和调试过程。
8KERN_INFO信息性消息,提供有关系统状态的信息(与 6 相同)。
9KERN_DEBUG调试信息,用于开发和调试过程(与 7 相同)。

3. 立即重启机器(b)

  • 功能描述:立即重启机器,不会将缓冲区同步到硬盘,也不会卸载已挂载的硬盘。
  • 使用场景:系统处于严重故障状态,需要快速重启。
  • 命令示例echo b | sudo tee /proc/sysrq-trigger

输入命令后直接黑屏,迅速重启以前操作的记录也不能看到,说明缓冲区直接丢失了

4. 系统崩溃©

  • 功能描述:使系统崩溃,如果配置了 crashdump,崩溃后会生成 dump 文件。
  • 使用场景:用于内核调试或故障分析时,需要触发系统崩溃来生成 dump 文件。
  • 命令示例echo c | sudo tee /proc/sysrq-trigger

在这里插入图片描述

输入后系统直接崩溃,在嵌入式终端中会自动重新启动,但是虚拟机中没有自动重启(具体原因未知),且卡死了,最终通过电脑重启解决的。。。。

5. 发出 SIGTERM 信号(e)

  • 功能描述:向系统中除 init 外的所有进程发出 SIGTERM 信号,请求它们终止。
  • 使用场景:系统需要重启或关闭,但某些进程无法正常终止时。
  • 命令示例echo e | sudo tee /proc/sysrq-trigger

在这里插入图片描述

可以登录通过ps -ax命令可发现实际运行的进程都是init内的。

在这里插入图片描述

6.杀死内存的 hog 进程

  • 功能描述:调用oom killer(Out Of Memory killer)内核机制,oom_kill 杀死 hog 进程(当一个进程申请了大量的内存空间,而且长时间不释放,或者由于内存泄漏等问题不断占用更多内存,使得系统内存资源紧张,就可能被称为内存 hog 进程)。
  • 使用场景:系统内存耗尽,导致系统运行缓慢或无法正常工作时。
  • 命令示例echo f | sudo tee /proc/sysrq-trigger

在这里插入图片描述

操作记录的日志较多,下面会摘要说明一下:

[  469.278564] sysrq: Manual OOM execution#表示手动触发了 OOM Killer
[  469.278736] kworker/6:4 invoked oom-killer: gfp_mask=0xcc0(GFP_KERNEL), order=-1, oom_score_adj=0#内核工作队列进程触发了 OOM Killer
[  469.278738] CPU: 6 PID: 2691 Comm: kworker/6:4 Not tainted 5.4.0-84-generic #94~18.04.1-Ubuntu #第 6 个 CPU 核心上触发 OOM Killer 的进程 ID,
[  469.278739] Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 11/12/2020#硬件信息是虚拟机的型号和 BIOS 版本
....
[  469.278765] Mem-Info:#1.内存状态
[  469.278768] active_anon:215918 inactive_anon:6736 isolated_anon:0
                active_file:89139 inactive_file:65543 isolated_file:0
                unevictable:4 dirty:20 writeback:0 unstable:0
                slab_reclaimable:18956 slab_unreclaimable:23523
                mapped:62518 shmem:7103 pagetables:10934 bounce:0
                free:1508470 free_pcp:2633 free_cma:0
                #每个内存节点(NUMA 架构中的内存区域)的详细内存状态
[  469.278770] Node 0 active_anon:863672kB inactive_anon:26944kB active_file:356556kB inactive_file:262172kB unevictable:16kB isolated(anon):0kB isolated(file):0kB mapped:250072kB dirty:80kB writeback:0kB shmem:28412kB shmem_thp: 0kB shmem_pmdmapped: 0kB anon_thp: 0kB writeback_tmp:0kB unstable:0kB all_unreclaimable? no
#2.内存分配(每个节点)
[  469.278770] Node 0 DMA free:15872kB min:132kB low:164kB high:196kB active_anon:0kB inactive_anon:0kB active_file:0kB inactive_file:0kB unevictable:0kB writepending:0kB present:15988kB managed:15904kB mlocked:0kB kernel_stack:0kB pagetables:0kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:0kB
[  469.278773] lowmem_reserve[]: 0 2948 7867 7867 7867
.....#省略
[  469.278790] 161790 total pagecache pages
[  469.278791] 0 pages in swap cache
[  469.278792] Swap cache stats: add 0, delete 0, find 0/0
[  469.278792] Free swap  = 2097148kB
[  469.278792] Total swap = 2097148kB
[  469.278793] 2097005 pages RAM
[  469.278793] 0 pages HighMem/MovableOnly
[  469.278793] 65921 pages reserved
[  469.278793] 0 pages cma reserved
[  469.278794] 0 pages hwpoisoned
[  469.278794] Tasks state (memory values in pages):
#3.任务状态
[  469.278794] [  pid  ]   uid  tgid total_vm      rss pgtables_bytes swapents oom_score_adj name
[  469.278807] [    432]     0   432    17625     2332   176128        0             0 systemd-journal
[  469.278808] [    455]     0   455    26475      443    94208        0             0 lvmetad
[  469.278810] [    457]     0   457    11867     1418   118784        0         -1000 systemd-udevd
[  469.278812] [    545]     0   545    39696       75    77824        0             0 .......#省略
#4. OOM Killer 决策
sudo
[  469.279009] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/,task=gnome-shell,pid=2363,uid=1000
[  469.279100] Out of memory: Killed process 2363 (gnome-shell) total-vm:3804628kB, anon-rss:107304kB, file-rss:90076kB, shmem-rss:64kB, UID:1000 pgtables:1736kB oom_score_adj:0
#5. OOM Reaper 清理被杀死的进程占用的内存
[  469.285280] oom_reaper: reaped process 2363 (gnome-shell), now anon-rss:0kB, file-rss:4kB, shmem-rss:92kB

1).内存状态

  • active_anon:活动的匿名内存页(如进程的堆栈和数据)。
  • inactive_anon:不活动的匿名内存页。
  • active_file:活动的文件映射内存页。
  • inactive_file:不活动的文件映射内存页。
  • unevictable:不能被回收的内存页。
  • dirty:脏数据页(尚未写入磁盘的缓存数据)。
  • writeback:正在写入磁盘的缓存数据。
  • slab_reclaimable:可回收的内存页。
  • slab_unreclaimable:不可回收的内存页。
  • mapped:已映射的内存页。
  • shmem:共享内存页。
  • pagetables:页面表占用的内存。
  • free:空闲内存页。

2).内存分配(每个节点)

  • DMA:直接内存访问内存区域。
  • free:空闲内存。
  • minlowhigh:这些值用于内核内存管理,表示内存压力的不同阈值。

3).任务状态

  • pid:进程 ID。
  • uid:用户 ID。
  • tgid:线程组 ID。
  • total_vm:进程的虚拟内存总大小。
  • rss:常驻内存大小(驻留在物理内存中的页数)。
  • pgtables_bytes:页面表占用的内存大小。
  • swapents:交换分区的使用量。
  • oom_score_adj:进程的 OOM 调整分数。

4). OOM Killer 决策

  • oom-kill:表示 OOM Killer 决策的开始。
  • task=gnome-shell:被选中的进程是 gnome-shell
  • pid=2363:被杀死的进程 ID。
  • uid=1000:进程的用户 ID(通常是普通用户)。
  • total-vm:进程的虚拟内存总大小。
  • anon-rss:匿名内存的常驻大小。
  • file-rss:文件映射内存的常驻大小。
  • shmem-rss:共享内存的常驻大小。
  • pgtables:页面表占用的内存大小。
  • oom_score_adj:进程的 OOM 调整分数。

5). OOM Reaper 清理被杀死的进程占用的内存

  • oom_reaper:是 OOM Killer 的后续进程,负责清理被杀死的进程占用的内存。
  • reaped process:表示 OOM Reaper 已经成功清理了被杀死的进程。
  • anon-rss:0kB:匿名内存的常驻大小变为 0。
  • file-rss:4kB:文件映射内存的常驻大小变为 4kB。
  • shmem-rss:92kB:共享内存的常驻大小变为 92kB。

7. 发出 SIGKILL 信号 (i)

  • 功能描述:向系统中除 init 外的所有进程发出 SIGKILL 信号,强制终止它们。
  • 使用场景:系统需要重启或关闭,但某些进程无法通过 SIGTERM 信号终止时。
  • 命令示例echo i | sudo tee /proc/sysrq-trigger

在这里插入图片描述

在虚拟机中卡死,在嵌入式linux的终端内因为看门狗的问题直接重启了。

8. 解冻被 FIFREEZE ioctl 冻结的文件系统(j)

FIFREEZE ioctl 是 Linux 内核中用于冻结文件系统的一种机制, 通过暂停文件系统上的所有写入操作,使文件系统进入冻结状态,从而确保文件系统处于一致的状态,当文件系统被冻结时,内核会等待所有正在进行的文件系统操作完成,并阻止新的写入操作,但读取操作仍然可以进行,支持的文件系统包括 ext3、ext4、ReiserFS、JFS、XFS、Btrfs、F2FS、NILFS2 等

  • 功能描述:强制解冻被 FIFREEZE ioctl 冻结的文件系统。
  • 使用场景:在进行备份或创建文件系统快照时,使用 FIFREEZE ioctl 冻结文件系统,可以确保备份或快照的数据一致性,避免因文件系统在备份过程中被修改而导致的数据不一致问题。对文件系统进行检查、修复或升级等维护操作时,冻结文件系统可以防止文件系统被访问或修改,从而保证维护操作的准确性和安全性,文件系统被 FIFREEZE ioctl 冻结,需要手动解冻时。
  • 命令示例echo j | sudo tee /proc/sysrq-trigger

在这里插入图片描述

9. 杀死所有当前虚拟控制台中的程序(k)

  • 功能描述:Secure Access Key (SAK) 杀死所有当前虚拟控制台中的程序。
  • 使用场景:当某个虚拟控制台被恶意程序占用时,可用于清除该控制台上的程序。
  • 命令示例echo k | sudo tee /proc/sysrq-trigger

虚拟机中卡死,jobs命令(显示当前虚拟控制台中的程序)也没查到对应的后台运行程序。

在这里插入图片描述

10. 显示所有活动 CPU 的堆栈回溯(l)

  • 功能描述:显示所有活动 CPU 的堆栈回溯。
  • 使用场景:用于内核调试,分析系统中各 CPU 的运行状态。
  • 命令示例echo l | sudo tee /proc/sysrq-trigger在这里插入图片描述
[  409.631102] sysrq: Show backtrace of all active CPUs#表示显示所有活动 CPU 的回溯信息
[  409.631105] NMI backtrace for cpu 7#表示对 CPU 7 进行非屏蔽中断(NMI)回溯。NMI 是一种不可屏蔽的中断,用于获取 CPU 的状态信息。
....
[  409.631108] Call Trace:#分显示了内核调用栈的回溯信息,每行表示一个函数调用的返回地址和偏移量
[  409.631128]  dump_stack+0x6d/0x8b
[  409.631132]  nmi_cpu_backtrace+0x94/0xa0
...#省略
[  409.631154] RIP: 0033:0x7fe1c004d154#指令指针寄存器,指向当前正在执行的指令。
[  409.631155] Code: 89 02 48 c7 c0 ff ff ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 66 90 48 8d 05 b1 07 2e 00 8b 00 85 c0 75 13 b8 01 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 54 f3 c3 66 90 41 54 55 49 89 d4 53 48 89 f5#显示当前指令附近的机器码
[  409.631156] RSP: 002b:00007ffcd989dd58#栈指针寄存器
EFLAGS: 00000246#标志寄存器 ORIG_RAX: 0000000000000001
[  409.631157] RAX: ffffffffffffffda RBX: 0000000000000002 RCX: 00007fe1c004d154#RAX、RBX、RCX、RDX、RSI、RDI、RBP 等:通用寄存器的值
....#省略
[  409.631160] Sending NMI from CPU 7 to CPUs 0-6:#表示 CPU 7 向其他 CPU 发送 NMI 以获取回溯信息
[  409.631236] NMI backtrace for cpu 1 skipped: idling at native_safe_halt+0x12/0x20#表示其他 CPU(如 CPU 0、1、2、3、4、6)在空闲状态,回溯信息被跳过。
....#省略
[  409.631261] NMI backtrace for cpu 5#显示 CPU 5 的回溯信息,包括进程、寄存器状态等
[  409.631262] CPU: 5 PID: 2161 Comm: gnome-terminal- Not tainted 5.4.0-84-generic #94~18.04.1-Ubuntu
......#省略

11. 显示当前内存信息 (m)

  • 功能描述:将当前内存信息 dump 到终端。
  • 使用场景:需要查看当前内存使用情况,用于故障排查或性能分析时。
  • 命令示例echo m | sudo tee /proc/sysrq-trigger

在这里插入图片描述

1)内存统计信息

  • active_anon:活动的匿名内存页(如进程的堆栈和数据)。
  • inactive_anon:不活动的匿名内存页。
  • active_file:活动的文件映射内存页。
  • inactive_file:不活动的文件映射内存页。
  • unevictable:不能被回收的内存页。
  • dirty:脏数据页(尚未写入磁盘的缓存数据)。
  • writeback:正在写入磁盘的缓存数据。
  • slab_reclaimable:可回收的内存页。
  • slab_unreclaimable:不可回收的内存页。
  • mapped:已映射的内存页。
  • shmem:共享内存页。
  • pagetables:页面表占用的内存。
  • free:空闲内存页。
  • free_pcp:每个 CPU 的私有空闲内存页。
  • free_cma:专用内存区域的空闲内存页。

2)内存节点信息

  • Node 0:表示第一个内存节点(NUMA 架构中的内存区域)。
  • active_anon:活动的匿名内存大小(以 KB 为单位)。
  • inactive_anon:不活动的匿名内存大小。
  • active_file:活动的文件映射内存大小。
  • inactive_file:不活动的文件映射内存大小。
  • unevictable:不能被回收的内存大小。
  • isolated(anon):隔离的匿名内存大小。
  • isolated(file):隔离的文件映射内存大小。
  • mapped:已映射的内存大小。
  • dirty:脏数据大小。
  • writeback:正在写入磁盘的缓存数据大小。
  • shmem:共享内存大小。
  • shmem_thp:共享内存透明大页大小。
  • shmem_pmdmapped:共享内存 PMD 映射大小。
  • anon_thp:匿名透明大页大小。
  • writeback_tmp:临时写入缓冲区大小。
  • unstable:不稳定内存大小。
  • all_unreclaimable? no:表示所有内存是否不可回收,no 表示有可回收的内存。

3)每个内存区域的详细信息

  • DMA:直接内存访问区域。
  • DMA32:32 位直接内存访问区域。
  • Normal:普通内存区域。
  • free:空闲内存大小。
  • minlowhigh:内存压力的阈值。
  • active_anoninactive_anonactive_fileinactive_file:各个区域的活动和不活动内存大小。
  • unevictable:不能被回收的内存大小。
  • writepending:等待写入的内存大小。
  • present:存在的内存大小。
  • managed:被管理的内存大小。
  • mlocked:被锁定的内存大小。
  • kernel_stack:内核栈使用的内存大小。
  • pagetables:页面表使用的内存大小。
  • bounce:用于数据传输的缓冲区大小。
  • free_pcp:每个 CPU 的私有空闲内存大小。
  • local_pcp:本地 CPU 的私有空闲内存大小。
  • free_cma:专用内存区域的空闲内存大小。

4)内存分配

UMMUE 等标记表示内存块的状态:

  • U:表示该内存块被使用。
  • M:表示该内存块被分配但未使用。
  • E:表示该内存块被分配并被使用。

5)大页信息

  • hugepages_total:总的大页数。
  • hugepages_free:空闲的大页数。
  • hugepages_surp:超出部分的大页数。
  • hugepages_size:大页的大小(这里是 1 GB 和 2 MB)。

6)页缓存和交换分区

  • total pagecache pages:总页缓存页数。
  • pages in swap cache:交换缓存中的页数。
  • Swap cache stats:交换缓存的统计信息。
  • Free swap:空闲交换分区大小。
  • Total swap:总交换分区大小。

7)内存总结

  • pages RAM:总物理内存页数。
  • pages HighMem/MovableOnly:高内存或可移动内存页数。
  • pages reserved:保留的内存页数。
  • pages cma reserved:专用内存区域保留的内存页数。
  • pages hwpoisoned:被硬件标记为损坏的内存页数。

12. 使实时任务可以设置 nice 值(n)

linux中调整进程优先级参数(nice值)的介绍和使用说明可以参考这篇文章

  • 功能描述:用来使实时任务可以设置 nice 值。
  • 使用场景:用于实时任务的调度管理,调整实时任务的优先级。
  • 命令示例echo n | sudo tee /proc/sysrq-trigger在这里插入图片描述

具体没搞清楚怎么使实时任务不可以设置 nice 值。希望有清楚的码友可以答疑(^U^)ノ~YO

13. 关闭系统(o)

  • 功能描述:关闭系统。
  • 使用场景:系统需要紧急关闭时。
  • 命令示例echo o | sudo tee /proc/sysrq-trigger

直接关机,感觉有点像硬件直接断电的感觉。

14. 显示寄存器 §

  • 功能描述:将寄存器和标志信息 dump 到终端。
  • 使用场景:用于内核调试,查看当前 CPU 寄存器和标志的状态。
  • 命令示例echo p | sudo tee /proc/sysrq-trigger

在这里插入图片描述

由上图所示,每次输出的可能不一致,应该是在哪个核就输出哪个cpu的信息,具体信息如下:

  • CPU#7:表示这是 CPU 7 的寄存器信息。
  • active:表示当前 CPU 的活动状态寄存器值。
  • gen-PMC0gen-PMC3:表示通用性能监视计数器(Performance Monitoring Counters,PMCs)的信息。
    • ctrl:控制寄存器的值。
    • count:计数寄存器的值。
    • left:剩余计数寄存器的值。

15. 显示所有定时器 (q)

  • 功能描述:显示所有定时器。
  • 使用场景:用于分析系统中定时器的运行情况,帮助调试和优化定时器相关的代码。
  • 命令示例echo q | sudo tee /proc/sysrq-trigger

在这里插入图片描述

16. 同步所有已挂载的文件系统(s)

  • 功能描述:将尝试同步所有已挂载的文件系统。
  • 使用场景:在系统重启或关闭前,确保所有数据都已写入磁盘。
  • 命令示例echo s | sudo tee /proc/sysrq-trigger

在这里插入图片描述

17.显示当前任务的列表 (t)

  • 功能描述:显示当前任务的列表和它们的信息。
  • 使用场景:用于查看系统中当前的进程状态,帮助调试和分析系统性能问题。
  • 命令示例echo t | sudo tee /proc/sysrq-trigger

在这里插入图片描述

这个信息输出的东西很多,没有过多的研究过,最常用的就是下面这个信息:

在这里插入图片描述

任务的状态说明:

  • S:通常表示任务处于“可中断睡眠”状态(TASK_INTERRUPTIBLE)。
  • R:运行状态(TASK_RUNNING),任务正在 CPU 上执行。
  • D:不可中断睡眠(TASK_UNINTERRUPTIBLE)。
  • Z:僵尸状态(TASK_ZOMBIE),任务已终止但尚未被父进程回收。
  • T:跟踪状态(TASK_TRACED),任务被调试器暂停。
  • X:死亡状态(TASK_DEAD),任务已终止。
  • W:等待退出(TASK_WAKING),任务正在被唤醒。

18. unmount (u)

  • 功能描述:强制卸载文件系统。
  • 使用场景:文件系统处于不正常状态时,用于强制卸载。
  • 命令示例echo u | sudo tee /proc/sysrq-trigger

19. show-blocked-tasks (w)

  • 功能描述:显示被阻塞的任务。
  • 使用场景:用于分析系统中被阻塞的进程,帮助排查死锁等问题。
  • 命令示例echo w | sudo tee /proc/sysrq-trigger

在这里插入图片描述

20. dump-ftrace-buffer (z)

  • 功能描述:转储 ftrace 缓冲区的内容。
  • 使用场景:用于分析内核的动态跟踪信息,帮助调试内核性能问题。
  • 命令示例echo z | sudo tee /proc/sysrq-trigger

在这里插入图片描述

注意事项

  • 风险性:SysRq 命令具有非常高的权限,误用可能导致数据丢失或系统崩溃,使用时需谨慎,特别是在生产环境中。
  • 权限:执行这些命令需要 root 权限。

参考资料

使用 /proc/sysrq-trigger 进行系统调试和故障排除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值