跳转至

Python Profiling

DataKit 支持通过 ddtrace 和 py-spy 对 Python 应用进行性能分析。

前置条件

请先安装 DataKit,并启用 Profile 采集器。

ddtrace 接入

ddtrace 是 Datadog 推出的开源链路追踪与性能分析库,可采集 CPU、内存分配和锁竞争等数据。

  • 安装 Python ddtrace 库:
pip3 install 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 前缀:

DD_ENV=testing DD_SERVICE=python-profiling-manual DD_VERSION=1.2.3 python3 app.py

查看 Profile

应用启动后,ddtrace 会定期采集数据(默认每分钟一次)并上报给 DataKit。等待几分钟后,即可在 观测云 的 应用性能监测 > Profile 中查看对应数据。

py-spy 接入

py-spy 是一个可独立运行的非侵入式 Python 性能分析工具,对目标应用负载影响较小。

默认情况下,py-spy 会按指定格式将采样数据写入本地文件;DataKit 专用版本会改为将数据直接发送到 DataKit。

  • 安装

推荐通过 pip 安装:

pip3 install py-spy-for-datakit

离线安装时,可参考以下 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 安装:

cargo install py-spy-for-datakit
  • 使用

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 页面查看性能分析数据。

文档评价

文档内容是否对您有帮助?