2012-06-04 6 views
6

背景:Python:コードのCPU使用量はどのようにしてわかりますか?

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

問題:アプリケーションのプロファイリング

  • は私の関数にかかる時間を与えます。
  • 高負荷ではこの時間が長くなります。
  • 複雑な計算やCPUを待っているために時間がかかることがあります。

コードで消費されるCPUサイクルを見つけるにはどうすればよいですか?

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

  • 私は非常に効率的なコードを書かれたと私はいくつかの愚かなコードがCPUを取り、スローダウンを引き起こしている可能性がありますより多くのCPUパワーに

OR

  • を追加する必要があるかもしれませんか?

何か助けてください!

アップデート:私は私のWebアプリケーションをプロファイルするのJMeterを使用しています

  • が、それは私に2つのリクエスト/秒のスループットを提供します。 [100人のユーザー]
  • 1リクエストで100リクエスト対1.25秒の平均時間は36秒です。 4人の労働者

詳細

  • 設定nginxの+ Uwsgi 1日にRESTのAPI
  • からの応答を使用して、使用されませデータベースないのREST APIの応答をヒットキャッシュされますしたがって、違いはありません。
  • json解析にujsonを使用する。

知りたい:Pythonの-Djangoのは非常に多くの大規模サイトのための非常に多くのORGSで使用されて

  • 、その後、いくつかのハイエンドデバッグ/メモリ・CPUの解析ツールがなければなりません。
  • 私が見つけたのは、プロファイリングを実行するコードのカジュアルスニペットでした。
+0

プロファイリングの最初のステップは、ほとんどの時間が費やされている*機能を見て、それがなぜ正当化されたのか、それを減らすことができるかどうかを調べることです。 *時間量(たいていの場合)は*時間の比例量*ほど重要ではありません。 –

+0

すべての時間は、アプリケーション全体に分散されているようです。特定の点は問題のある領域ではないようです。 –

+1

と思われますか?正確な測定をしましたか?ヘルプについては、http://stackoverflow.com/a/582337/851737を参照してください。 – schlamar

答えて

2

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

また、徐々に負荷を増やすことで、CPUの段階的な増加(CPUのボトルネックの示唆)やCPUの急激なジャンプがあるかどうかをよりよく確認することができます。必ずしもより多くのCPUによって対応されるわけではない)。

Cosntantスループットタイマーのようなものを使用してリクエストをペースしてみると、JMeterがシステムをオーバーロードしてしまいます。

+0

初心者向けにアドバイスをお願いします。あなたが提案したオプションを探求します。それとは別に、私はdjango/python用の忍者プロファイリングツールをもっと探しています - それはシステムにもっと細かく見えるかもしれません。 :) –

+0

面白いこれはオフになっていますが、-1 .... geesh – user1012451

0

チェックアウトNew Relicかなり甘い分析のために、彼らはジャンゴ固有のログを持っています。

関連する問題