crash 进程分析流程图

crash 进程分析流程图

xml 复制代码
                [Start: vmcore loaded]
                          │
                          ▼
                ┌───────────────────┐
                │ 1. 全局进程概览   │
                │ crash> ps         │
                └───────────────────┘
                          │
                          ▼
       ┌─────────────────────────────────┐
       │ 有无异常状态进程? (D, Z, R卡住) │
       └─────────────────────────────────┘
             │Yes                                │No
             ▼                                   ▼
 ┌─────────────────────────┐         ┌─────────────────────┐
 │ 2. 查看运行队列 runq    │         │ 说明进程状态正常,  │
 │ crash> runq             │         │转向内核级分析(IRQ等)│
 └─────────────────────────┘         └─────────────────────┘
             │
             ▼
 ┌─────────────────────────┐
 │ 3. 定位占用CPU进程       │
 │ crash> ps -p <pid>       │
 │ crash> task <pid>        │
 └─────────────────────────┘
             │
             ▼
 ┌─────────────────────────┐
 │ 4. 调用栈分析            │
 │ crash> bt <pid>          │
 │ crash> foreach bt        │
 │   (grep futex/lock/wait) │
 └─────────────────────────┘
             │
             ▼
 ┌─────────────────────────┐
 │ 5. 线程卡住?            │
 │ crash> ps -T            │
 │ crash> bt -p <pid>      │
 └─────────────────────────┘
             │
     ┌───────┴────────┐
     │Yes              │No
     ▼                 ▼
 ┌─────────────────┐   ┌─────────────────────────┐
 │ 6a. futex/锁卡住│   │ 6b. 内存/IO异常?        │
 │ → 死锁/竞争问题 │   │ crash> vm <pid>         │
 └─────────────────┘   │ crash> files <pid>      │
                       │ crash> sig <pid>     │
                       └─────────────────────────┘

📌 分析要点

  1. ps → 谁在跑

    • 看状态 (R/S/D/Z),快速锁定异常进程。
  2. runq → 谁占 CPU

    • 确认 load average 高是不是某些进程占满。
  3. bt / foreach bt → 卡在哪

    • 如果大量进程停在 futex_wait,就是锁竞争。
    • 如果卡在 schedule_timeout,可能是 IO 卡住。
  4. vm / files → 资源使用

    • 内存泄漏、文件句柄过多时一眼就能看到。
  5. sig → 是否被信号干扰

    • 检查 SIGKILL、SIGSTOP 是否 pending。

📑 crash 详细解释(进程分析)


1. 查看进程列表

shell 复制代码
crash> ps

显示所有进程(PID、状态、CPU、命令名)。

  • > 表示正在运行的进程
  • ST = 状态(R=running, S=sleeping, D=uninterruptible 等)

👉 快速了解 当机时系统在跑什么进程


2. 查看特定进程

css 复制代码
crash> ps -p <pid>

查看指定 PID 的进程。

示例:

css 复制代码
crash> ps -p 1234

3. 查看线程

r 复制代码
crash> ps -T

列出所有线程(包括内核线程、用户线程)。

👉 分析多线程进程卡住时很有用。


4. 查看 task_struct 信息

shell 复制代码
crash> task <pid>

打印该进程的内核数据结构 task_struct,包括:

  • PID / TID / 状态
  • mm(内存管理)
  • files(打开的文件)
  • signal(信号处理)

5. 查看进程调用栈

  • 内核栈(task_struct 的内核调用栈)

    shell 复制代码
    crash> bt <pid>
  • 用户态栈(如果 core dump 包含用户空间信息)

    css 复制代码
    crash> bt -p <pid>

👉 用于定位进程在当机时 卡在哪个函数


6. 查看运行队列

shell 复制代码
crash> runq

显示每个 CPU 上的运行队列,能看到 当时哪个进程占用 CPU


7. 查找阻塞点

csharp 复制代码
crash> foreach bt

遍历所有进程的内核栈,快速找到 阻塞的函数(如 futex_wait、schedule、mutex_lock 等)。


8. 查看内存映射

shell 复制代码
crash> vm <pid>

显示该进程的虚拟内存布局(代码段、堆、栈、mmap)。

👉 用于排查 OOM 或段错误。


9. 文件描述符

shell 复制代码
crash> files <pid>

显示进程打开的文件、socket、管道。

👉 排查句柄泄漏。


10. 信号信息

shell 复制代码
crash> sig <pid>

查看进程信号状态(pending、blocked)。

👉 分析进程是否被杀或挂起。


✅ 实战建议

  1. 全局扫描卡住的点

    perl 复制代码
    crash> foreach bt | grep -E "futex|lock|mutex|wait"

    找出所有可能死锁的进程。

  2. 查看 CPU 占用

    shell 复制代码
    crash> runq
    crash> ps

    确认高负载进程。

  3. 检查 OOM 进程

    shell 复制代码
    crash> vm <pid>
    crash> files <pid>

    看内存和 fd 使用情况。


相关推荐
黄筱筱筱筱筱筱筱1 小时前
LINUX-防火墙
linux·服务器·网络
сокол2 小时前
【网安-Web渗透测试-靶场系列】AWD-Platform(ctf-hub)
linux·服务器·ubuntu·网络安全·docker
utf8mb4安全女神2 小时前
Linux系统服务相关命令【定时任务设置】【任务进程管理】【防火墙区域应用】
linux·运维·服务器
不吃土豆的马铃薯5 小时前
Spdlog 进阶:日志基本控制、日志格式控制、异步记录器
linux·服务器·开发语言·前端·c++
疯狂成瘾者6 小时前
常见的 Linux 版本
linux·运维·服务器
szxinmai主板定制专家6 小时前
基于ZYNQ MPSOC图像采集与压缩系统总体设计方案
linux·arm开发·人工智能·嵌入式硬件·fpga开发
liulilittle6 小时前
TCP UCP:基于卡尔曼滤波的BBR增强型拥塞控制算法
linux·网络·c++·tcp/ip·算法·c·通讯
tianrun12347 小时前
Ubuntu 24.04 安装 Fcitx5 + Rime + 搜狗词库(替代 IBus 与 Linux 搜狗输入法)
linux·运维·ubuntu
wxytxdy7 小时前
通过猜数字游戏学习Shell脚本的分支、循环编写
linux·学习
YIN_尹7 小时前
【Linux 系统编程】手撕一个简易版的shell命令行解释器
android·linux·运维