Django 프로파일 링


100

내 django 응용 프로그램이 프로덕션에서 고통스럽게 느려졌습니다. 아마도 복잡하거나 색인화되지 않은 쿼리 때문일 것입니다.

내 애플리케이션을 프로파일 링하는 django-ish 방법이 있습니까?

답변:


81

Django Debug Toolbar를 사용해보십시오 . 각 페이지에서 실행되는 쿼리와 소요 시간이 표시됩니다. 정말 유용하고 강력하며 사용하기 쉬운 도구입니다.

또한 문서 에서 데이터베이스 액세스 최적화의 Django 성능에 대한 권장 사항을 읽어보십시오 .

그리고 장고 성능 정보 야곱 카플란 - 모스에 의해.


13
Django Debug Toolbar를 조심하세요. 개발 중에 꺼졌고 페이지 렌더링이 저전력 노트북에서 훨씬 빨랐습니다. 개발 서버에서 다운로드하는 데이터의 양을 확인하세요.
Dominic Rodger

2
django-debug-toolbar는 django-orm이 얼마나 많은 쿼리를 db에 연결하는지 확인하는 데 도움이되며 select_related () 함수가이를 덜 때리는 방법을 볼 수 있습니다.
panchicore 2010 년

11
@ dominic-rodger 나는 디버그 툴바가 얼마나 느리게 일을 처리하는지 깨닫지 못했습니다. 내 SQL 쿼리는 작았지만 (30ms) CPU 시간은 매우 높았습니다 (800ms). 내가 튜닝하고 있던 다른 페이지에는 300ms의 SQL 시간과 8000ms의 CPU 시간이 있었기 때문에 문제의 원인을 찾으려고 계속 노력했습니다. Django 툴바를 끄면 작업 속도가 빨라집니다. 3 년 후에도 여전히 관련이 있습니다.
Esteban

2
@Esteban,이 의견에 감사드립니다. 말 그대로 엄청나게 많은 CPU 시간에 대해 열광했습니다 .dhango 툴바가 걸렸습니다. django 프로파일 링으로 CPU 시간은 약 30 초 였고, 일단 제거하면 1.5 초로 떨어졌습니다!
noob Mama

28

Google에 "django-profiling"을 입력하면 다음과 같은 링크가 표시됩니다.

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/

개인적으로 저는 미들웨어 접근 방식을 사용하고 있습니다. 즉, 각 사용자가 세션에 저장된 "프로파일 링"플래그를 전환 할 수 있으며, 프로파일 링 미들웨어가 플래그가 설정되었음을 감지 하면 다음과 같은 Python의 핫샷 모듈을 사용합니다.

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

편집 : Konstantin이 언급 한 SQL 쿼리 http://github.com/robhudson/django-debug-toolbar 를 프로파일 링 하는 것은 좋은 일이지만 쿼리가 정말 느리다면 (아마도 수백 또는 수천 개가 있기 때문에) 브라우저에로드 될 때까지 엄청난 시간을 기다려야합니다. 그런 다음 속도가 느려서 탐색하기가 어려울 것입니다. 또한 django-debug-toolbar는 설계 상 AJAX 요청의 내부에 대한 유용한 정보를 제공 할 수 없습니다.

EDIT2 : django-extensions 에는 훌륭한 프로파일 링 명령이 내장되어 있습니다.

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

그냥 이렇게하고 짜잔 :

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

7
code.google.com/p/django-profile 은 사용자 프로필 django 애플리케이션입니다. django를 프로파일 링하는 데 사용되지 않습니다. :)
dzen 2011 년

1
@dzen : 하, 좋은 지적입니다. 다음과 같이 의도되었습니다. code.google.com/p/django-profiling :-)
Tomasz Zieliński 2011 년

1
를 실행 한 후 프로파일 러 덤프를 읽는 방법이 궁금하다면 darkcoding.net/software/profiling-django-for-cpu-bound-appspython manage.py runprofileserver --prof-path=/path/to/dir 블로그를 팔로우 하세요 .
Neara 2014 년

아 예, 제가 가장 좋아하는 것은 Google을 사용하여 내 검색어에 대한 상위 답변 중 하나를 찾는 것입니다. "여기에 도달하기 위해 검색 한 것을 Google로만 사용하세요."
Anna

참고 hotshot이 대답하고, 그래서 더 이상 사용되지 않으며 파이썬 3에서 제거 된 ProfilingDjango위키 페이지가 더 이상 20202.에 관련이있을 수 없다
Patryk Bratkowski

16

데이터 액세스를 프로파일 링하려면 (대부분 병목 현상이 발생하는) django-live-profiler를 확인하십시오 . Django Debug Toolbar와 달리 모든 요청에서 동시에 데이터를 수집하며 너무 많은 성능 오버 헤드 나 앱 내부 노출없이 프로덕션에서 실행할 수 있습니다.

이 스크린 샷 확인


19
1.6 이상을 지원하지 않으며 1 년 이상 활동이 없습니다.
Han He


5

KCacheGrind 팬이라면 Django의 환상적인 테스트와 함께 쉘을 사용하는 것이 매우 쉽습니다. Client 특히 프로덕션에서 즉석에서 프로필 로그를 생성 . 이 기술은 가벼운 터치가 있기 때문에 여러 차례 사용했습니다. 성가신 미들웨어 나 타사 Django 애플리케이션이 필요하지 않습니다!

예를 들어 느리게 실행되는 것처럼 보이는 특정보기를 프로파일 링하려면 셸을 열고 다음 코드를 입력 할 수 있습니다.

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

결과 로그를 시각화하기 위해 hotshot2cachegrind를 사용했습니다.

그러나 다른 옵션도 있습니다.



0

최근에 Django 앱을 프로파일 링해야했고 이러한 제안을 많이 시도했습니다. 내가 사용하는 결국 pyinstrument 대신 , 미들웨어 목록에 하나의 업데이트를 사용 장고 응용 프로그램에 추가 할 수 있습니다 및 타이밍의 스택 기반의 뷰를 제공합니다.

다른 도구에 대한 내 경험에 대한 간략한 요약 :

  • Django Debug Toolbar 는 문제가 SQL 쿼리로 인해 발생하고pyinstrument
  • django-silk 는 잘 작동하지만 하위 요청 타이밍을 원하는 스택의 각 부분에 컨텍스트 관리자 또는 데코레이터를 추가해야합니다. 또한 cProfile타이밍 에 액세스하는 쉬운 방법을 제공하고 Ajax 타이밍을 자동으로 표시하므로 둘 다 정말 유용 할 수 있습니다.
  • djdt-flamegraph 는 유망 보였지만 페이지는 실제로 내 시스템에서 렌더링되지 않았습니다.

내가 시도한 다른 도구에 비해 pyinstrument설치 및 사용이 훨씬 쉬웠습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.