2011-09-19 37 views
5

Như tôi có thể thấy trong top tiện ích celery procecess tiêu tốn rất nhiều thời gian của CPU. Vì vậy, tôi muốn hồ sơ nó.Nhiệm vụ cần làm hồ sơ

tôi có thể làm nó bằng tay trên máy tính phát triển như vậy:

python -m cProfile -o test-`date +%Y-%m-%d-%T`.prof ./manage.py celeryd -B 

Nhưng để có timings chính xác tôi cần phải cấu hình nó trên máy tính sản xuất. Trên máy tính đó (Fedora 14) cần tây được đưa ra bởi init script. Ví dụ.

service celeryd start 

Cuối cùng, tôi đã tìm ra những tập lệnh này cuối cùng cũng gọi số manage.py celeryd_multi. Vì vậy, câu hỏi của tôi là làm thế nào tôi có thể nói celeryd_multi để bắt đầu cần tây với hồ sơ được kích hoạt? Trong trường hợp của tôi, điều này có nghĩa là thêm các tùy chọn -m cProfile -o out.prof vào python.

Bất kỳ trợ giúp nào được đánh giá cao.

Trả lời

12

Tôi nghĩ bạn đang bối rối hai vấn đề riêng biệt. Bạn có thể xử lý quá nhiều tác vụ cá nhân hoặc một tác vụ riêng lẻ có thể không hiệu quả.

Bạn có thể biết điều nào trong số này là vấn đề, nhưng không rõ ràng từ câu hỏi của bạn.

Để theo dõi số lượng tác vụ đang được xử lý, tôi khuyên bạn nên xem celerymon. Nếu một tác vụ cụ thể xuất hiện thường xuyên hơn mà bạn mong đợi thì bạn có thể điều tra nơi nó được gọi đến.

Lập cấu hình toàn bộ cần tây có thể không hữu ích vì bạn sẽ nhận được nhiều mã mà bạn không kiểm soát được. Như bạn nói nó cũng có nghĩa là bạn có một vấn đề đang chạy nó trong sản xuất. Tôi đề nghị bạn xem trực tiếp thêm số profiling code vào định nghĩa nhiệm vụ của bạn.

Bạn có thể sử dụng cProfile.run('func()') như một lớp không tách rời giữa cần tây và mã của bạn để mỗi lần chạy của tác vụ được lược tả. Nếu bạn tạo một tên tệp duy nhất và chuyển nó thành tham số thứ hai là run bạn sẽ có một thư mục đầy đủ dữ liệu hồ sơ mà bạn có thể kiểm tra trên cơ sở từng nhiệm vụ hoặc sử dụng pstats.add để kết hợp nhiều tác vụ chạy cùng nhau.

Cuối cùng, lược tả mỗi tác vụ có nghĩa là bạn cũng có thể bật hoặc tắt lược tả bằng cách sử dụng cài đặt trong mã dự án của bạn trên toàn cầu hoặc theo tác vụ thay vì cần sửa đổi tập lệnh init trên máy chủ của bạn.

+0

'celerymon' hiện không được duy trì. – harukaeru

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