Python プロファイラーの有効化

プロファイラーは、Datadog トレースライブラリ内で送信されます。アプリケーションですでに APM を使用してトレースを収集している場合は、ライブラリのインストールをスキップして、プロファイラーの有効化に直接進むことができます。

要件

Datadog Profiler には Python 2.7+ と Agent バージョン 7.20.2 以降または 6.20.2 以降が必要です。

以下のプロファイリング機能は、お使いの Python のバージョンに応じて利用可能です。

機能サポート対象の Python バージョン
Wall Time プロファイリングPython 2.7 以降
CPU タイムプロファイリングPOSIX プラットフォームの Python 2.7 以降
例外プロファイリングPOSIX プラットフォームの Python 3.7 以降
ロックプロファイリングPython 2.7 以降
メモリプロファイリングPython 3.5 以降

Continuous Profiler は、AWS Lambda などのサーバーレスプラットフォームには対応していません。

インストール

トレーシングとプロファイリング機能の双方を提供する ddtrace をインストールします。

pip install ddtrace

: プロファイリングには ddtrace ライブラリのバージョン 0.40+ が必要です。

ddtrace のバイナリディストリビューションに対応していないプラットフォームを使用している場合は、開発環境をインストールしてください。

たとえば、Alpine Linux では以下を実行します。

apk install gcc musl-dev linux-headers

使用方法

コードを自動的にプロファイリングするには、ddtrace-run を使用する際に、DD_PROFILING_ENABLED 環境変数を true に設定します。

DD_PROFILING_ENABLED=true \
DD_ENV=prod \
DD_SERVICE=my-web-app \
DD_VERSION=1.0.3 \
ddtrace-run python app.py

serviceversion のようなタグを追加すると、プロファイルのさまざまな側面をフィルター・グループ化できるため、強くお勧めします。以下のコンフィギュレーションを参照してください。

数分後、Datadog APM > Profiler ページでプロファイルを視覚化します。

プロファイラのライフサイクルを手動で制御するには、ddtrace.profiling.profiler.Profiler オブジェクトを使用します。

from ddtrace.profiling import Profiler

prof = Profiler(
    env="prod",  # if not specified, falls back to environment variable DD_ENV
    service="my-web-app",  # if not specified, falls back to environment variable DD_SERVICE
    version="1.0.3",   # if not specified, falls back to environment variable DD_VERSION
)
prof.start()

注意事項

os.fork を使ってプロセスをフォークすると、実はプロファイラが子プロセスで停止しているので、再起動する必要があります。Python 3.7+ では、新しいプロファイラが自動的に開始されます。

Python < 3.7 を使用している場合、子プロセスで新しいプロファイラを手動で起動する必要があります。

# For ddtrace-run users, call this in your child process
ddtrace.profiling.auto.start_profiler()

# Alternatively, for manual instrumentation,
# create a new profiler in your child process:
from ddtrace.profiling import Profiler

prof = Profiler()
prof.start()

コンフィギュレーション

環境変数を使用してプロファイラーを構成できます。

次のステップ

プロファイラーの概要ガイドでは、パフォーマンスの問題があるサンプルサービスを例に、Continuous Profiler を使用して問題を理解し修正する方法を確認します。

その他の参考資料