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


相关推荐
叼烟扛炮12 分钟前
Linux 学习笔记(五十四):内网穿透实战——用 frp 让外网访问你的私人电脑
linux·服务器·网络·笔记·学习
Android系统攻城狮25 分钟前
Linux FFmpeg深度解析之av_guess_format调用流程与实战(三十六)
linux·运维·服务器·ffmpeg·ffmpeg音视频进阶
进击的荆棘1 小时前
Linux系统——线程概念与控制之线程封装
linux·运维·服务器·线程
叼烟扛炮1 小时前
[LangChain] 学习笔记(05):提示词模板(Prompt)与少样本注入(Few-Shot)实战
linux·人工智能·笔记·学习·langchain·prompt
CodeYp20191 小时前
第5讲:Socket 编程 TCP
linux·socket·tcp
咔_1 小时前
有IPv6地址,为什么外面还是连不进来?让同一台服务分别卡在四个位置
linux·计算机网络
CodeYp20191 小时前
第3讲:网络命令
linux·网络·命令
2035去旅行13 小时前
bootcmd 详细讲解
linux·嵌入式·arm·soc
陈希12314 小时前
Linux 防火墙配置实战:firewalld、iptables 与云安全组
linux·运维·服务器
女神下凡15 小时前
芯参谋(95):嵌入式文件系统_开发指南
linux·服务器·arm开发·驱动开发·设计规范