Python Profiling
DataKit 支持通过 ddtrace 和 py-spy 对 Python 应用进行性能分析。
前置条件¶
请先安装 DataKit,并启用 Profile 采集器。
ddtrace 接入¶
ddtrace 是 Datadog 推出的开源链路追踪与性能分析库,可采集 CPU、内存分配和锁竞争等数据。
- 安装 Python
ddtrace库:
- 自动启用性能分析:
DD_PROFILING_ENABLED=true \
DD_ENV=dev \
DD_SERVICE=my-web-app \
DD_VERSION=1.0.3 \
DD_TRACE_AGENT_URL=http://127.0.0.1:9529 \
ddtrace-run python app.py
也可以在应用代码中初始化性能分析:
import time
import ddtrace
from ddtrace.profiling import Profiler
ddtrace.tracer.configure(
https=False,
hostname="localhost",
port="9529",
)
prof = Profiler()
prof.start(True, True)
# your code here ...
# while True:
# time.sleep(1)
采用这种方式时,启动应用无需添加 ddtrace-run 前缀:
查看 Profile¶
应用启动后,ddtrace 会定期采集数据(默认每分钟一次)并上报给 DataKit。等待几分钟后,即可在 观测云 的 应用性能监测 > Profile 中查看对应数据。
py-spy 接入¶
py-spy 是一个可独立运行的非侵入式 Python 性能分析工具,对目标应用负载影响较小。
默认情况下,py-spy 会按指定格式将采样数据写入本地文件;DataKit 专用版本会改为将数据直接发送到 DataKit。
- 安装
推荐通过 pip 安装:
离线安装时,可参考以下 Linux x86_64 示例安装已下载的预编译包,其它平台步骤相同。
# after download
# Install with pip
pip3 install --force-reinstall --no-index --find-links . py-spy-for-datakit
# Verify whether the installation was successful
py-spy-for-datakit help
如果系统已安装 Rust 和 Cargo,也可以通过 Cargo 安装:
- 使用
py-spy-for-datakit 增加了 datakit 子命令,专门用于向 DataKit 发送采样数据。可运行 py-spy-for-datakit help datakit 查看命令帮助:
| 参数 | 说明 | 默认值 |
|---|---|---|
| -H, --host | DataKit 的数据接收地址 | 127.0.0.1 |
| -P, --port | DataKit 的数据接收端口 | 9529 |
| -S, --service | 项目名称,可用于在后台区分不同项目,也可用于筛选和查询,建议配置。 | unnamed-service |
| -E, --env | 项目部署环境,可用于区分开发、测试和生产环境,也可用于筛选,建议配置。 | unnamed-env |
| -V, --version | 项目版本,可用于后台查询和筛选,建议配置。 | unnamed-version |
| -p, --pid | 要分析的 Python 程序进程 PID | 进程 PID 和项目启动命令必须至少指定一个。 |
| -d, --duration | 采样时长,单位为秒。每次到达该间隔后会向 DataKit 发送一次,最小值为 10。 | 60 |
| -r, --rate | 采样频率,即每秒采样次数 | 100 |
| -s, --subprocesses | 是否分析子进程 | false |
| -i, --idle | 是否采样未运行的线程 | false |
要分析正在运行的 Python 应用,可通过 --pid <PID> 或 -p <PID> 将其 PID 传给 py-spy-for-datakit。
例如,Python 进程 PID 为 12345,且 DataKit 监听地址为 127.0.0.1:9529 时,可运行:
py-spy-for-datakit datakit \
--host 127.0.0.1 \
--port 9529 \
--service <your-service-name> \
--env testing \
--version v0.1 \
--duration 60 \
--pid 12345
如果命令提示权限不足,请使用 sudo 运行。
py-spy-for-datakit 也可以直接启动并分析 Python 应用,无需指定 PID:
py-spy-for-datakit datakit \
--host 127.0.0.1 \
--port 9529 \
--service your-service-name \
--env testing \
--version v0.1 \
-d 60 \
-- python3 server.py # -- 后必须保留一个空格
等待一到两分钟后,即可在 观测云 的 应用性能监测 > Profile 页面查看性能分析数据。