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


相关推荐
Murphy_lx9 小时前
Linux(操作系统)文件系统--对打开文件的管理
linux·c语言·数据库
saber_andlibert9 小时前
【Linux】IPC——命名管道(fifo)
linux·运维·服务器
TU^9 小时前
Linux--权限
linux·服务器
阿星_10 小时前
PyCharm项目依赖库的备份与还原方法
linux·服务器·python
葵花日记10 小时前
Linux——自动化建构make/makefile
linux·运维·自动化
tt55555555555511 小时前
Linux零基础入门:权限与常用命令详解
linux·运维·服务器
woshihonghonga11 小时前
【Ubuntu 20.04升级python3.9后终端打不开的bug】
linux·开发语言·python
着迷不白11 小时前
手把手部署 HFish 蜜罐:从防火墙配置到登录使用,新手也能轻松上手
linux
凤凰战士芭比Q12 小时前
部署Tomcat11.0.11(Kylinv10sp3、Ubuntu2204、Rocky9.3)
linux·运维·tomcat
讓丄帝愛伱13 小时前
Arthas & JVM 性能排查
linux·jvm