Planet Python 日本語 フォロー グラハム・ダンプルトン:ラップチャー付き遅いコードの発見 Flaskショップの/orderエンドポイントは遅く、ボトルネックを特定することが目標です。従来のストップウォッチ方式ではコードの変更が必要で、ログ行がリンクされず、断続的な遅延に対処するのが困難です。プロファイラーは詳細すぎるため、リクエスト固有の情報が不明瞭になります。既存の設定を使用すると、最初のトレースで時間の内訳がすぐに明らかになります。リクエストは37.3ms、ビューは36.3ms、サービスは35.9ms、レジャーは35.1msかかりますが、ゲートウェイはわずか8usです。これは、レジャーが遅延の主な原因であることを示しています。「セルフタイム」という概念は、子による遅延とは別に、それ自体が遅延している操作を区別します。Wraptureはこれを計算し、レジャーがそれ自体で遅延していることを示し、サービスとビューはレジャーを呼び出すために遅延していることを示します。wrapture.instrumentationとwrapture.timelineを使用したテストでこれが確認されます。OrderService.placeは31.0msのうち173usのセルフタイムを持ちますが、Ledger.recordがほとんどの時間を占めています。このレベルの詳細は、標準的なプロファイラーでは利用できません。長期的な監視のために、Aggregateコレクターは、合計時間、セルフタイム、最小時間、最大時間を含む、多くのリクエストにわたる統計情報を収集します。サーバーに30件のリクエストを送信したレポートは、Ledger.recordがセルフタイムで最大の貢献者であることを確認します。テナントごとの遅延を追跡するために、wrapture.annotateは、インフライトイベントに「X-Tenant」のようなカスタムデータを追加することを可能にします。これにより、トレースをフィルタリングして、どのテナントが遅延したリクエストを経験しているかを特定できます。Counterコレクターは、より安価な代替手段を提供し、期間を保持せずに操作をカウントするだけで、テストスイートでの予算ベースのアサーション(例:N+1クエリ問題の検出)に適しています。次のステップは、これらのイベントをトレーシングバックエンドにフィードすることです。 Graham Dumpleton: Finding slow code with wrapture grahamdumpleton.me Planet Python 日本語 RSS thenote.app
/orderエンドポイントは遅く、ボトルネックを特定することが目標です。従来のストップウォッチ方式ではコードの変更が必要で、ログ行がリンクされず、断続的な遅延に対処するのが困難です。プロファイラーは詳細すぎるため、リクエスト固有の情報が不明瞭になります。既存の設定を使用すると、最初のトレースで時間の内訳がすぐに明らかになります。リクエストは37.3ms、ビューは36.3ms、サービスは35.9ms、レジャーは35.1msかかりますが、ゲートウェイはわずか8usです。これは、レジャーが遅延の主な原因であることを示しています。「セルフタイム」という概念は、子による遅延とは別に、それ自体が遅延している操作を区別します。Wraptureはこれを計算し、レジャーがそれ自体で遅延していることを示し、サービスとビューはレジャーを呼び出すために遅延していることを示します。wrapture.instrumentationとwrapture.timelineを使用したテストでこれが確認されます。OrderService.placeは31.0msのうち173usのセルフタイムを持ちますが、Ledger.recordがほとんどの時間を占めています。このレベルの詳細は、標準的なプロファイラーでは利用できません。長期的な監視のために、Aggregateコレクターは、合計時間、セルフタイム、最小時間、最大時間を含む、多くのリクエストにわたる統計情報を収集します。サーバーに30件のリクエストを送信したレポートは、Ledger.recordがセルフタイムで最大の貢献者であることを確認します。テナントごとの遅延を追跡するために、wrapture.annotateは、インフライトイベントに「X-Tenant」のようなカスタムデータを追加することを可能にします。これにより、トレースをフィルタリングして、どのテナントが遅延したリクエストを経験しているかを特定できます。Counterコレクターは、より安価な代替手段を提供し、期間を保持せずに操作をカウントするだけで、テストスイートでの予算ベースのアサーション(例:N+1クエリ問題の検出)に適しています。次のステップは、これらのイベントをトレーシングバックエンドにフィードすることです。