SuperAPI AI 工具集

flight-profiler-stack

编程与开发

查看项目

更新于 10-16 04:59

技能介绍

用途:对运行中的 Python 进程做一次非流式快照,立即返回,用于诊断卡死、死锁,判断各线程当前阻塞位置,并定位业务代码文件与模块名。

主要能力:默认输出线程栈,显示文件名、行号与函数名。Linux 通过 pystack 显示 GIL 状态,并可加 --native 显示原生 C 级栈帧;macOS 通过注入的 server 经 CPython 的 _Py_DumpTracebackThreads 获取线程栈,输出含线程名,且原生帧不支持。加 -a 可在两平台显示按事件循环线程分组的 asyncio 任务与协程栈,含任务名、状态、协程限定名与挂起链;无活动协程时提示未找到。可用 -f 将输出重定向到文件。

使用方式:先阅读 flight-profiler-attach 了解平台要求、安装、权限与连接细节,再执行 flight_profiler <pid> --cmd "stack [options]" --no-color。选项包括 --native(仅 Linux)、-a/--async、-f/--filepath。注意 macOS 输出为最近调用在前,Linux 为最近调用在后,二者线程标识、GIL 状态与源码行显示方式不同。

适用场景:进程无响应、怀疑线程死锁、需要识别持有 GIL 的线程、排查挂起的 asyncio 任务、调试 C 扩展问题,以及为 watch、trace、module 等后续命令确定目标模块与文件路径。

限制:原生帧仅 Linux 支持;macOS 需标准 CPython 构建,PyPy 或裁剪构建可能缺少所需符号;-a 需要目标进程正在运行事件循环;仅显示待处理/等待中的任务,内部任务会被过滤;权限不足时需 sudo 或检查 ptrace_scope;目标进程已退出或 PID 错误时无输出。建议间隔数秒多次取快照以区分卡死与变慢。

相关命令:watch、perf、gilstat。