Membuat profil Django


100

Aplikasi django saya menjadi sangat lambat dalam produksi. Mungkin ini karena beberapa kueri yang kompleks atau tidak terindeks.

Apakah ada cara django-ish untuk membuat profil aplikasi saya?

Jawaban:


81

Coba Bilah Alat Debug Django . Ini akan menunjukkan kepada Anda kueri apa yang dieksekusi pada setiap halaman dan berapa banyak waktu yang mereka butuhkan. Ini adalah alat yang sangat berguna, kuat, dan mudah digunakan.

Juga, baca rekomendasi tentang kinerja Django dalam pengoptimalan akses Basis data dari dokumentasi.

Dan tip kinerja Django oleh Jacob Kaplan-Moss.


13
Hati-hati dengan Django Debug Toolbar - Saya mematikannya selama pengembangan dan rendering halaman secara signifikan lebih cepat di laptop saya (memang berdaya rendah) - lihat di server dev untuk melihat berapa banyak data yang Anda unduh.
Dominic Rodger

2
django-debug-toolbar membantu saya untuk melihat berapa banyak query django-orm mengenai db, dan kita dapat melihat bagaimana fungsi select_related () melakukan trik memukulnya lebih sedikit.
panchicore

11
@ dominic-rodger Saya tidak menyadari betapa lambatnya proses Debug Toolbar. Permintaan sql saya kecil (30ms) tetapi waktu cpu sangat tinggi (800ms). Halaman lain yang saya tuning memiliki waktu sql 300ms, dan waktu cpu 8000ms - jadi saya terus mencoba menemukan sumber masalahnya. Mematikan Django Toolbar mempercepat segalanya. 3 tahun kemudian, masih relevan.
Esteban

2
@Esteban, terima kasih banyak atas komentar ini, saya benar-benar menjadi gila karena jumlah waktu CPU yang sangat tinggi, membutuhkan toolbar dhango. Dengan pembuatan profil django waktu CPU sekitar 30 detik, setelah saya menghapusnya, turun menjadi 1,5 detik !!
noob Mama

28

Cukup ketik "django-profiling" di google, Anda akan mendapatkan tautan ini (dan lainnya):

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/

Secara pribadi saya menggunakan pendekatan middleware - yaitu setiap pengguna dapat mengaktifkan flag "profiling" yang disimpan dalam sebuah sesi, dan jika middleware profiling saya mengetahui bahwa sebuah flag telah disetel, ia menggunakan modul hotshot Python seperti ini:

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

EDIT: Untuk membuat profil kueri SQL http://github.com/robhudson/django-debug-toolbar yang disebutkan oleh Konstantin adalah hal yang menyenangkan - tetapi jika kueri Anda sangat lambat (mungkin karena jumlahnya ratusan atau ribuan), maka Anda Akan menunggu waktu yang tidak masuk akal hingga dimuat ke browser - dan kemudian akan sulit untuk menjelajah karena kelambatan. Juga, django-debug-toolbar dengan desain tidak dapat memberikan wawasan yang berguna ke internal permintaan AJAX.

EDIT2: django-extensions memiliki perintah pembuatan profil yang bagus di dalamnya:

https://github.com/django-extensions/django-extensions/blob/master/docs/runprofileserver.rst

Lakukan saja ini dan voila:

$ mkdir /tmp/my-profile-data
$ ./manage.py runprofileserver --kcachegrind --prof-path=/tmp/my-profile-data

7
code.google.com/p/django-profile adalah aplikasi django Profil Pengguna. ini tidak digunakan sebagai pembuatan profil django :)
dzen

1
@dzen: Hah, bagus, itu dimaksudkan untuk menjadi: code.google.com/p/django-profiling :-)
Tomasz Zieliński

1
jika Anda bertanya-tanya bagaimana cara membaca dump profiler setelah berjalan python manage.py runprofileserver --prof-path=/path/to/dir, ikuti blog ini: darkcoding.net/software/profiling-django-for-cpu-bound-apps .
Neara

ah ya, favorit saya, menggunakan google untuk menemukan salah satu jawaban teratas atas pertanyaan saya adalah "hanya google, hal yang Anda cari di Google untuk sampai di sini"
Anna

Perhatikan bahwa hotshotsudah tidak digunakan lagi dan dihapus dengan Python 3, jadi jawaban ini dan ProfilingDjangohalaman Wiki mungkin tidak lagi relevan pada tahun 20202.
Patryk Bratkowski

16

Untuk akses data pembuatan profil (yang sering menjadi penyebab kemacetan) periksa django-live-profiler . Tidak seperti Django Debug Toolbar ia mengumpulkan data di semua permintaan secara bersamaan dan Anda dapat menjalankannya dalam produksi tanpa terlalu banyak overhead kinerja atau mengekspos internal aplikasi Anda.

Lihat tangkapan layar ini


19
tidak mendukung 1.6 ke atas, tidak ada aktivitas selama lebih dari satu tahun.
Han He


5

Untuk semua Anda penggemar KCacheGrind, saya merasa sangat mudah menggunakan shell bersama-sama dengan pengujian luar biasa Django Clientuntuk menghasilkan log profil secara on-the-fly, terutama dalam produksi. Saya telah menggunakan teknik ini sekarang pada beberapa kesempatan karena memiliki sentuhan ringan - tidak diperlukan middleware atau aplikasi pihak ketiga yang mengganggu Django!

Misalnya, untuk membuat profil tampilan tertentu yang tampaknya berjalan lambat, Anda dapat membuka shell dan mengetik kode ini:

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()

Untuk memvisualisasikan log yang dihasilkan, saya telah menggunakan hotshot2cachegrind:

Tetapi ada opsi lain juga:



0

Saya perlu membuat profil aplikasi Django baru-baru ini dan mencoba banyak dari saran ini. Saya akhirnya menggunakan pyinstrument sebagai gantinya , yang dapat ditambahkan ke aplikasi Django menggunakan pembaruan tunggal ke daftar middleware dan menyediakan tampilan pengaturan waktu berbasis tumpukan.

Ringkasan singkat dari pengalaman saya dengan beberapa alat lain:

  • Django Debug Toolbar bagus jika Anda masalahnya adalah karena kueri SQL dan bekerja dengan baik dalam kombinasi denganpyinstrument
  • django-silk bekerja dengan baik, tetapi membutuhkan penambahan manajer konteks atau dekorator ke setiap bagian dari tumpukan di mana Anda ingin pengaturan waktu sub-permintaan. Ini juga menyediakan cara mudah untuk mengakses cProfilepengaturan waktu dan secara otomatis menampilkan pengaturan waktu ajax, yang keduanya dapat sangat membantu.
  • djdt-flamegraph tampak menjanjikan, tetapi halaman tersebut tidak pernah benar-benar ditampilkan di sistem saya.

Dibandingkan dengan alat lain yang saya coba, pyinstrumentsecara dramatis lebih mudah untuk menginstal dan digunakan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.