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


相关推荐
阿干tkl3 分钟前
Linux 虚拟机模板制作指南
linux·vmware
裤裤兔43 分钟前
linux提取指定前缀文件到其他文件夹
linux·运维·服务器·bash·终端
mucheni1 小时前
迅为RK3568开发板OpeHarmony学习开发手册-修改应用程序名称
linux·前端·学习
CS_浮鱼1 小时前
【Linux】进程间通信
linux·运维·数据库
Altair12311 小时前
实验6 基于端口和域名的虚拟主机
linux·运维·服务器·云计算
爱和冰阔落1 小时前
【Linux工具链】编译效率革命:条件编译优化+动静态库管理+Makefile自动化,解决多场景开发痛点
linux·运维·自动化
wa的一声哭了1 小时前
WeBASE管理平台部署-WeBASE-Web
linux·前端·网络·arm开发·spring boot·架构·区块链
Shylock_Mister2 小时前
ARM与x86交叉编译实战排错指南
linux·c语言·arm开发
敲上瘾2 小时前
MySQL事务全攻略:ACID特性、隔离级别与并发控制
linux·数据库·mysql·安全
b***9102 小时前
在linux(Centos)中Mysql的端口修改保姆级教程
linux·mysql·centos