- 重要な情報
- はじめに
- 用語集
- ガイド
- エージェント
- インテグレーション
- OpenTelemetry
- 開発者
- API
- CoScreen
- アプリ内
- Service Management
- インフラストラクチャー
- アプリケーションパフォーマンス
- 継続的インテグレーション
- ログ管理
- セキュリティ
- UX モニタリング
- 管理
プロファイラを設定してもプロファイル検索ページにプロファイルが表示されない場合は、デバッグモードをオンにし、デバッグファイルと次の情報でサポートチケットを開いてください。
この問題は dd-trace-rb
バージョン 0.54.0
からは発生しないと思われます。
それでも問題が解決しない場合は、エラーに至るまでのバックトレースを添えて、サポートチケットを作成してください。
0.54.0
より前のバージョンでは、プロファイラーはスレッド生成を追跡するために Ruby VM をインスツルメントする必要があり、他の gem による同様のインスツルメンテーションと衝突していました。
以下の gem のいずれかを使用している場合
rollbar
: バージョン 3.1.2 以降を使用していることを確認します。logging
: LOGGING_INHERIT_CONTEXT
環境変数を false
に設定して、 logging
のスレッドコンテキストの継承を
無効にします。Resque のジョブをプロファイリングする場合、Resque のドキュメントにあるように、RUN_AT_EXIT_HOOKS
環境変数を 1
に設定する必要があります。
このフラグがないと、短期間の Resque ジョブのプロファイルは使用できなくなります。
Ruby 2.7 と古いバージョンの GCC (4.8 以下) の間には、プロファイラに影響を与える非互換性があることが知られています (アップストリーム Ruby レポート、dd-trace-rb
バグレポート)。その結果、次のようなエラーメッセージが表示されることがあります: “Your ddtrace installation is missing support for the Continuous Profiler because compilation of the Ruby VM just-in-time header failed. Your C compiler or Ruby VM just-in-time compiler seem to be broken.” (Ruby VM ジャストインタイムヘッダーのコンパイルに失敗したため、あなたの ddtrace インストールには Continuous Profiler のサポートが欠けています。C コンパイラまたは Ruby VM ジャストインタイムコンパイラが壊れているようです。)
これを解決するには、オペレーティングシステムまたは Docker イメージを更新して、GCC のバージョンが v4.8 よりも新しいものになるようにしてください。
この問題についての更なるヘルプは、サポートにお問い合わせの上、DD_PROFILING_FAIL_INSTALL_IF_MISSING_EXTENSION=true gem install ddtrace
と結果の mkmf.log
ファイルを実行したときの出力を含めてお送りください。
Ruby プロファイラーでは、プロファイリングデータを収集する際に、深いバックトレースを切り捨てています。切り捨てられたバックトレースは呼び出し元の関数の一部が欠落しているため、ルートコールフレームにリンクすることが不可能になります。その結果、切り捨てられたバックトレースは N frames omitted
というフレームにまとめられます。
環境変数 DD_PROFILING_MAX_FRAMES
、または次のコードで、最大深度を増やすことができます。
Datadog.configure do |c|
c.profiling.advanced.max_frames = 500
end
dd-trace-rb
1.11.0+ でネイティブ拡張機能を使用する Ruby gems からの予期しない失敗やエラーdd-trace-rb
1.11.0 から、プロファイラー “CPU Profiling 2.0” が、Ruby アプリケーションに unix シグナル SIGPROF
を送ることでデータを集め、よりきめ細かいデータ収集が可能になりました。
SIGPROF
の送信は一般的なプロファイリング手法であり、ネイティブ拡張機能/ライブラリからのシステムコールがシステムの EINTR
エラーコードで中断されることがあります。
まれに、ネイティブ拡張機能またはネイティブ拡張機能から呼び出されたライブラリの EINTR
エラーコードに対するエラー処理が欠けていたり、不正確な場合があります。
以下のような非互換性があることが知られています。
mysql2
gem を 8.0.0 より古いバージョンの libmysqlclient
と一緒に使用すること。影響を受ける libmysqlclient
のバージョンは、Ubuntu 18.04 に存在することが知られていますが、20.04 またはそれ以降のリリースには存在しません。rugged
gem を使用すること。このような場合、プロファイラーが自動的に非互換性を検出し、回避策を適用します。
上記以外のネイティブ拡張機能を使用した Ruby gems で失敗やエラーが発生した場合、手動で “no signals” 回避策を有効にすることで、SIGPROF
シグナルを使用しないようにすることができます。
この回避策を有効にするには、DD_PROFILING_NO_SIGNALS_WORKAROUND_ENABLED
環境変数を true
に設定するか、コードで以下を設定します。
Datadog.configure do |c|
c.profiling.advanced.no_signals_workaround_enabled = true
end
注: 上記の設定は dd-trace-rb
1.12.0 以降で利用可能です。
非互換性を見つけたり疑ったりした場合は、サポートチケットで弊社チームにお知らせください。 そうすることで、Datadog はそれらを自動検出リストに追加し、gem/ライブラリの作者と協力して問題を解決することができます。
お役に立つドキュメント、リンクや記事: