6

バックグラウンド

私はDjangoアプリケーションを持っています。それは低負荷で動作し、かなりうまく応答しますが、100ユーザー/秒のような高負荷では、100%のCPUを消費し、CPUの不足のために速度が低下します。

問題:

  • アプリケーションのプロファイリングにより、関数にかかる時間がわかります。
  • この時間は高負荷で増加します。
  • 消費される時間は、複雑な計算またはCPUの待機が原因である可能性があります。

では、コードの一部によって消費されるCPUサイクルを見つける方法は?

CPU消費量を減らすと、応答時間が長くなります。

  • 非常に効率的なコードを記述した可能性があり、CPUパワーを追加する必要があります

また

  • CPUを使用して速度を低下させる愚かなコードがあるかもしれませんか?

アップデート

  • Jmeterを使用してWebアプリのプロファイルを作成していますが、スループットは2リクエスト/秒です。[100ユーザー]
  • 100回のリクエストで平均36秒、1回のリクエストで1.25秒の時間が得られます。

より詳しい情報

  • 構成Nginx+Uwsgi、4人のワーカー
  • REST APIからの応答を使用して、データベースは使用されていません
  • 最初のヒットで、REST APIの応答がキャッシュされるため、違いはありません。
  • ujsonjson解析に使用します。

知りたい:

  • Python-Djangoは、非常に多くの大規模なサイトの非常に多くの組織で使用されているため、ハイエンドのデバッグ/メモリ-CPU分析ツールが必要です。
  • 私が見つけたものはすべて、プロファイリングを実行するコードのカジュアルなスニペットでした。
4

2 に答える 2

2

CPUが徐々に増加し、CPUが高くなる前にプロファイラーを実行できるように、ゆっくりと十分に遅くなるようにテストを構成してみてください。CPUが最大になっているときにコードをプロファイリングしようとしても意味がありません。この時点では、すべてが遅くなるからです。実際、プロファイラーから有用なデータを取得するには、実際には比較的軽い負荷しか必要ありません。

また、負荷を徐々に増やすことで、CPUが徐々に増加するか(CPUのボトルネックを示唆する)、またはCPUが突然ジャンプするか(おそらく別のタイプの問題を示唆する)、必ずしもそうではないかどうかをよりよく確認できます。より多くのCPUによって対処されます)。

Cosntantスループットタイマーのようなものを使用してリクエストのペースを調整してみてください。これにより、JMeterが夢中になり、システムに過負荷がかかるのを防ぐことができます。

于 2012-06-05T23:40:22.673 に答える
0

New Relicをチェックして、かなり甘い分析を行ってください。django固有のログがあります。

于 2012-09-08T11:58:57.523 に答える