Câu trả lời:
Hãy thử Thanh công cụ gỡ lỗi Django . Nó sẽ cho bạn biết những truy vấn nào được thực hiện trên mỗi trang và chúng mất bao nhiêu thời gian. Đó là một công cụ thực sự hữu ích, mạnh mẽ và dễ sử dụng.
Ngoài ra, hãy đọc các khuyến nghị về hiệu suất Django trong tối ưu hóa truy cập Cơ sở dữ liệu từ tài liệu.
Và mẹo biểu diễn Django của Jacob Kaplan-Moss.
Chỉ cần gõ "django-profiling" trên google, bạn sẽ nhận được các liên kết này (và hơn thế nữa):
http://code.djangoproject.com/wiki/ProfilingDjango
http://code.google.com/p/django-profiling/
http://www.rkblog.rk.edu.pl/w/p/django-profiling-hotshot-and-kcachegrind/
Cá nhân tôi đang sử dụng phương pháp tiếp cận phần mềm trung gian - tức là mỗi người dùng có thể chuyển đổi cờ "hồ sơ" được lưu trữ trong một phiên và nếu phần mềm trung gian hồ sơ của tôi nhận thấy rằng một cờ đã được đặt, nó sẽ sử dụng mô-đun hotshot của Python như thế này:
def process_view(self, request, view_func, view_args, view_kwargs):
# setup things here, along with: settings.DEBUG=True
# to get a SQL dump in connection.queries
profiler = hotshot.Profile(fname)
response = profiler.runcall(view_func, request, *view_args, **view_kwargs)
profiler.close()
# process results
return response
CHỈNH SỬA: Để lập hồ sơ truy vấn SQL, http://github.com/robhudson/django-debug-toolbar được Konstantin đề cập là một điều tuyệt vời - nhưng nếu các truy vấn của bạn thực sự chậm (có thể vì có hàng trăm hoặc hàng nghìn trong số chúng), thì bạn Tôi sẽ phải đợi một khoảng thời gian điên cuồng cho đến khi nó được tải vào trình duyệt - và sau đó sẽ rất khó duyệt do chậm. Ngoài ra, thanh công cụ django-debug-do thiết kế không thể cung cấp thông tin chi tiết hữu ích về nội bộ của các yêu cầu AJAX.
EDIT2: django-extensions có một lệnh cấu hình tuyệt vời được tích hợp sẵn:
https://github.com/django-extensions/django-extensions/blob/master/docs/runprofileserver.rst
Chỉ cần làm điều này và thì đấy:
$ mkdir /tmp/my-profile-data
$ ./manage.py runprofileserver --kcachegrind --prof-path=/tmp/my-profile-data
python manage.py runprofileserver --prof-path=/path/to/dir
, hãy theo dõi blog này: darkcoding.net/software/profiling-django-for-cpu-bound-apps .
hotshot
đã không được dùng nữa và bị xóa trong Python 3, vì vậy câu trả lời này và ProfilingDjango
trang Wiki có thể không còn phù hợp vào năm 20202.
Để truy cập dữ liệu hồ sơ (đây là nơi thường xuyên bị tắc nghẽn), hãy xem django-live-profiler . Không giống như Django Debug Toolbar, thanh công cụ này thu thập dữ liệu trên tất cả các yêu cầu đồng thời và bạn có thể chạy nó trong phiên bản sản xuất mà không cần quá nhiều chi phí về hiệu suất hoặc để lộ nội dung ứng dụng của bạn.
Không biết xấu hổ cắm ở đây, nhưng gần đây tôi đã tạo https://github.com/django-silk/silk cho mục đích này. Nó hơi giống với thanh công cụ django nhưng có lịch sử, lập hồ sơ mã và kiểm soát chi tiết hơn đối với mọi thứ.
Đối với tất cả những người hâm mộ KCacheGrind, tôi thấy rất dễ dàng sử dụng shell song song với thử nghiệm tuyệt vời của Django Client
để tạo nhật ký hồ sơ một cách nhanh chóng, đặc biệt là trong sản xuất. Bây giờ tôi đã sử dụng kỹ thuật này vài lần vì nó có một cái chạm nhẹ - không cần phần mềm trung gian khó chịu hoặc ứng dụng Django của bên thứ ba!
Ví dụ: để cấu hình một chế độ xem cụ thể có vẻ như đang chạy chậm, bạn có thể bẻ khóa trình bao và nhập mã này:
from django.test import Client
import hotshot
c = Client()
profiler = hotshot.Profile("yourprofile.prof") # saves a logfile to your pwd
profiler.runcall(c.get, "/pattern/matching/your/view/")
profiler.close()
Để hình dung nhật ký kết quả, tôi đã sử dụng hotshot2cachegrind:
Nhưng cũng có các tùy chọn khác:
Khi các dạng xem không phải là HTML, ví dụ như JSON, hãy sử dụng các phương pháp phần mềm trung gian đơn giản để lập hồ sơ.
Dưới đây là một số ví dụ:
https://gist.github.com/1229685 - thu thập tất cả các cuộc gọi sql đã được đưa vào chế độ xem
https://gist.github.com/1229681 - cấu hình tất cả các lệnh gọi phương thức được sử dụng để tạo chế độ xem
Gần đây, tôi cần lập hồ sơ một ứng dụng Django và đã thử nhiều đề xuất trong số này. Thay vào đó , tôi đã sử dụng pyinstrument , có thể được thêm vào ứng dụng Django bằng một bản cập nhật duy nhất cho danh sách phần mềm trung gian và cung cấp chế độ xem thời gian dựa trên ngăn xếp.
Tóm tắt nhanh về kinh nghiệm của tôi với một số công cụ khác:
pyinstrument
cProfile
thời gian và tự động hiển thị thời gian ajax, cả hai đều có thể thực sự hữu ích.So với các công cụ khác mà tôi đã thử, pyinstrument
cài đặt và sử dụng dễ dàng hơn đáng kể.