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 使用情况。


相关推荐
FLS1689 小时前
Kali搭建sqli-labs靶场
linux·sql·安全·网络安全
quqi999 小时前
Enable FIPS in ubuntu (by quqi99)
linux·运维·ubuntu
人工智能训练师9 小时前
在Ubuntu中如何使用PM2来运行一个编译好的Vue项目
linux·运维·服务器·vue.js·ubuntu·容器
zhongwenhua5209 小时前
ZeroMQ 编译 & 项目使用流程文档
linux·zmq
Lynnxiaowen10 小时前
今天继续学习shell脚本
linux·运维·学习·云计算·bash
云上小朱11 小时前
文件下载-ubuntu操作系统下载指定文件
linux·shell
hmcjn(小何同学)11 小时前
轻松Linux-9.进程间通信
linux·运维·服务器·c++·bash
月光在发光11 小时前
19_内核模块挂载问题处理
linux·运维·服务器
Liang_GaRy11 小时前
心路历程-Linux如何赋予权限?
linux·运维·服务器
Hello阿尔法11 小时前
基于 NFS 的文件共享实现
linux·嵌入式