2012-06-04 48 views
6

Bối cảnh:Python: Làm thế nào để bạn tìm thấy mức tiêu thụ CPU cho một đoạn mã?

Tôi có một ứng dụng django, nó hoạt động và đáp ứng khá tốt trên tải thấp, nhưng trên tải cao như 100 người dùng/giây, nó chiếm 100% CPU và sau đó do thiếu CPU chậm .

Vấn đề:

  • Profiling ứng dụng mang lại cho tôi thời gian thực hiện theo chức năng.
  • Lần này tăng khi tải trọng cao.
  • Thời gian tiêu thụ có thể do tính toán phức tạp hoặc chờ CPU.

vậy, cách tìm chu kỳ CPU được tiêu thụ bởi một đoạn mã?

Vì, việc giảm mức tiêu thụ CPU sẽ làm tăng thời gian phản hồi.

  • tôi có thể đã viết cực kỳ mã hiệu quả và cần phải bổ sung thêm sức mạnh của CPU

HOẶC

  • tôi có thể có một số mã ngu ngốc dùng CPU và gây ra chậm?

Mọi trợ giúp đều được đánh giá cao!

Cập nhật:

  • Tôi đang sử dụng Jmeter đến hồ sơ webapp của tôi, nó mang lại cho tôi một thông lượng của 2 yêu cầu/giây. [100 người dùng]
  • Tôi nhận được thời gian trung bình là 36 giây cho 100 yêu cầu và 1,25 giây thời gian trên 1 yêu cầu.

More Info

  • Cấu hình Nginx + Uwsgi với 4 công nhân
  • Không cơ sở dữ liệu được sử dụng, sử dụng một câu trả lời từ một API REST
  • On 1st nhấn phản ứng của REST API bị lưu trữ , do đó không tạo ra sự khác biệt.
  • Sử dụng ujson để phân tích cú pháp json.

Tò mò muốn biết:

  • Python-Django được sử dụng bởi rất nhiều tổ chức đã cho rất nhiều các trang web lớn, sau đó phải có một số cao cấp công cụ phân tích Debug/Memory-CPU.
  • Tất cả những gì tôi tìm thấy là các đoạn mã thông thường thực hiện lược tả.
+0

Bước đầu tiên của tôi trong hồ sơ là xem * (các) chức năng * hầu hết thời gian được sử dụng và họ điều tra lý do tại sao, nếu nó hợp lý và nếu/làm thế nào nó có thể được giảm. * Số tiền * của thời gian (thường) không quan trọng bằng số * tỷ lệ thuận * thời gian. –

+0

Tất cả thời gian thực hiện dường như được phân phối trong suốt ứng dụng. Không có điểm cụ thể nào có vẻ là một vấn đề. –

+1

Dường như? Bạn đã đo chính xác chưa? Xem http://stackoverflow.com/a/582337/851737 để được trợ giúp. – schlamar

Trả lời

2

Bạn có thể thử định cấu hình thử nghiệm để tăng tốc chậm, đủ chậm để bạn có thể thấy CPU tăng dần và sau đó chạy profiler trước khi bạn đạt CPU cao. Không có điểm cố gắng để cấu hình mã khi CPU là maxed ra bởi vì vào thời điểm này tất cả mọi thứ sẽ được làm chậm. Trong thực tế, bạn thực sự chỉ cần một tải tương đối nhẹ để có được dữ liệu hữu ích từ một profiler.

Ngoài ra, bằng cách tăng dần tải, bạn sẽ thấy rõ hơn nếu CPU tăng dần (đề xuất tắc nghẽn CPU) hoặc nếu nhảy đột ngột trong CPU (có thể là một loại vấn đề khác) điều đó sẽ không nhất thiết phải được giải quyết bằng nhiều CPU hơn).

Hãy thử sử dụng một cái gì đó như Bộ đếm thời gian thông qua Cosntant để tăng tốc yêu cầu, điều này sẽ ngăn chặn JMeter bị mang đi và quá tải hệ thống.

+0

Tư vấn tốt để bắt đầu .. Tôi sẽ khám phá các tùy chọn bạn đã đề xuất. Ngoài ra, tôi đang tìm kiếm thêm một công cụ định hình ninja cho django/python - Điều đó có thể cung cấp một cái nhìn chi tiết hơn về hệ thống. :) –

+0

vui này được kiểm tra nhưng nhận -1 .... geesh – user1012451

0

Thanh toán New Relic cho một số phân tích khá ngọt ngào, họ đã đăng nhập bằng django cụ thể.

Các vấn đề liên quan