PyStack 开源项目教程
pystack 🔍 🐍 Like pstack but for Python! 项目地址: https://gitcode.com/gh_mirrors/py/pystack
1. 项目介绍
PyStack 是一个用于分析运行中的 Python 进程或 Python 核心转储文件的工具。它通过使用“禁忌魔法”来让你检查 Python 进程的堆栈帧,帮助你快速轻松地了解进程正在做什么(或崩溃时在做什么),而无需解释 CPython 内部复杂的机制。
PyStack 的主要功能包括:
- 支持运行中的进程和核心转储文件。
- 显示每个线程是否持有 Python GIL,是否正在等待获取 GIL,或正在释放 GIL。
- 显示线程是否正在运行垃圾回收周期。
- 可选地显示本地函数调用以及 Python 函数调用。
- 自动解码符号。
- 包含内联函数的调用。
- 可选地显示 Python 堆栈帧中的局部变量和函数参数的值。
- 对运行中的进程安全使用,不会修改内存或执行代码。
- 可选地,可以在不暂停进程的情况下执行 Python 堆栈分析。
- 分析核心文件的速度比通用工具(如 GDB)快 10 倍。
- 支持优化过的 Python 解释器二进制文件。
- 即使在没有符号或调试信息的 Python 解释器二进制文件中也能工作。
- 对内存损坏有很好的容忍度。
- 自包含,不依赖外部工具或程序。
2. 项目快速启动
2.1 安装依赖
在开始之前,你需要安装以下二进制依赖:
libdw
libelf
在 Debian 系统上,可以通过以下命令安装:
sudo apt-get install libdw-dev libelf-dev
2.2 克隆项目
克隆 PyStack 项目到本地:
git clone git@github.com:bloomberg/pystack.git
cd pystack
2.3 创建虚拟环境
创建并激活 Python 虚拟环境:
python3 -m venv /path/to/pystack-env
source /path/to/pystack-env/bin/activate
2.4 安装 PyStack
在虚拟环境中安装 PyStack:
python3 -m pip install --upgrade pip
python3 -m pip install -e .
2.5 安装测试和文档生成依赖
安装测试和文档生成所需的 Python 库:
python3 -m pip install -r requirements-test.txt -r requirements-extra.txt
2.6 运行 PyStack
使用 PyStack 分析运行中的进程:
pystack remote <PID>
例如:
pystack remote 112
3. 应用案例和最佳实践
3.1 分析运行中的 Python 进程
假设你有一个运行中的 Python 进程,其 PID 为 112。你可以使用以下命令来分析该进程的堆栈:
pystack remote 112
输出示例:
Traceback for thread 112 [] (most recent call last):
(Python) File "/test.py", line 17, in <module>
first_func()
(Python) File "/test.py", line 6, in first_func
second_func()
(Python) File "/test.py", line 10, in second_func
third_func()
(Python) File "/test.py", line 14, in third_func
time.sleep(1000)
3.2 分析核心转储文件
假设你有一个核心转储文件 core_dump
,你可以使用以下命令来分析该文件:
pystack core core_dump
4. 典型生态项目
PyStack 作为一个强大的调试工具,可以与以下项目结合使用,以提高调试效率:
4.1 GDB
GDB 是一个强大的调试工具,可以与 PyStack 结合使用,以分析更复杂的调试场景。
4.2 Valgrind
Valgrind 是一个内存调试和分析工具,可以与 PyStack 结合使用,以检测内存泄漏和内存错误。
4.3 Python Profilers
Python 自带的性能分析工具(如 cProfile
和 line_profiler
)可以与 PyStack 结合使用,以分析 Python 代码的性能瓶颈。
通过结合这些工具,开发者可以更全面地了解和优化 Python 应用程序的性能和稳定性。
pystack 🔍 🐍 Like pstack but for Python! 项目地址: https://gitcode.com/gh_mirrors/py/pystack