Este documento fornece uma introdução aos conceitos de profiling, debug e tracing de aplicações Python. Ele discute ferramentas como pdb, cProfile, line_profiler, disptrace e memory_profiler, mostrando exemplos de como cada uma delas pode ser usada para analisar o desempenho e depurar aplicações. O documento também aborda conceitos como debugging, profiling, tracing e análise de memória, além de responder possíveis dúvidas sobre o tema.
5. Pai da Maria Eduarda,
do João Fernando
e marido da Camila
6. Tópicos
- Conceitos
- Por que monitorar uma aplicação
- Debugging
- Profiling
- Tracing
- Memory Profiling
- Holly Grail
- Dúvidas?
7. Conceitos
- Debug: Metodo de Investigação do sistema
(em execução) em busca do problema/erro.
- Profiling: Análise dinâmica de um sistema
para medir recursos usado por ele no sistema.
- Tracing: Processo de gravar o
comportamento de runtime do sistema para
análise (debug/profiling)
15. Standard Library
http://aidsource.ning.com/page/resource-library
16. cProfile
Biblioteca padrão para profiling
Prós:
- standard lib
- baixo impacto na execução.
- usa extensão em C
Contras:
- só funciona com metodos
- não há suporte para gráficos (nativo)
18. resultado do profile
mauro@r2d2:~/projetos/pythonbrasil8$ python -m cProfile profile_app.py
1 function calls in 0.000 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
8 function calls in 0.001 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.000 0.000 0.001 0.001 cProfile.py:132(run)
1 0.000 0.000 0.001 0.001 cProfile.py:137(runctx)
1 0.000 0.000 0.001 0.001 cProfile.py:14(run)
1 0.000 0.000 0.000 0.000 cProfile.py:5(<module>)
1 0.000 0.000 0.000 0.000 cProfile.py:66(Profile)
1 0.000 0.000 0.001 0.001 profile_app.py:3(<module>)
1 0.000 0.000 0.000 0.000 profile_app.py:5(profile_me)
1 0.001 0.001 0.001 0.001 {method 'enable' of '_lsprof.Profiler' objects
19. resultado do profile - legenda
ncalls: numero de chamados
tottime: tempo total gasto na função dada (excluindo o tempo feito nas
chamadas para sub-funções)
percall: tottime/ncalls
cumtime: tempo total gasto nesta e todas as subrotinas
percall: cumtime/ncalls
filename:lineno(function): dados respectivos de cada função
20. profile
Outra biblioteca inspirada na cProfile (Pure Python)
Prós:
- standard lib
Contras:
- os mesmo da cProfile
- impacto significante na execução.
Usada para extender as funcionalidades do profiler default (cProfile).
21. hotshot
Biblioteca para profiling em alto desempenho
Prós:
- standard lib
- baixo impacto na execução, cProfile.
Contras:
- mais lento na geração dos dados
- não funciona bem com threads
- será descontinuado em breve.
23. line_profiler
Profiling linha a linha
Prós:
- simples e fácil
- usa a cProfile
- visão detalhada da execução do código.
Contras:
- desempenho inferior ao cProfile
- resultado resumido
24. resultado do line_profiler
mauro@r2d2:~/projetos/pythonbrasil8$ kernprof.py -l line_profile_app.py
Wrote profile results to line_profile_app.py.lprof
mauro@r2d2:~/projetos/pythonbrasil8$ python -m line_profiler line_profile_app.py.lprof
Timer unit: 1e-06 s
File: line_profile_app.py
Function: profile_me at line 3
Total time: 1e-05 s
Line # Hits Time Per Hit % Time Line Contents
==============================================================
3 @profile
4 def profile_me(limit):
5
6 1 1 1.0 10.0 counter = 0
7
8 12 5 0.4 50.0 while counter <= limit:
9 11 4 0.4 40.0 counter = counter + 1
27. runsnakerun_app.py
#!/usr/bin/env python
def print_function(data):
print data
def char2ord(char):
return ord(char)
def profile_me(word):
for char in word:
num = char2ord(char)
print_function('Ordinal from %s is %i' % (char, num))
if __name__ == '__main__':
profile_me("Python Brasil 8")
gerando os dados de análise
$ python -m cProfile -o snake.data runsnakerun_app.py
42. psutils
biblioteca de monitoramento de recursos do sistema
Prós:
- multi-plataforma
- fácil
- resultados em estruturas de dados Python
- monitora:
- cpu/processos
- memoria/discos,
- rede
- usuarios