Ver o uso de memória de um script
Aviso: Este post foi traduzido para o português usando um modelo de tradução automática. Por favor, me avise se encontrar algum erro.
Se um script estiver consumindo muita RAM, podemos monitorizá-lo para ver o que está consumindo.
Instalação
Para poder monitorizá-lo, vamos a instalar memory_profiler
. Podemos instalá-lo com Conda
conda install memory_profiler
ou com pip
pip install memory_profiler
Uso
Decorador
Podemos colocar um decorador na função que queremos monitorar.
from memory_profiler import profile
@profile
def minha_funcao():
pass
%%writefile memory_profiler_decorator.pyfrom memory_profiler import profile@profiledef my_function():a = [1] * (10 ** 6)b = [2] * (2 * 10 ** 7)del breturn aif __name__ == '__main__':my_function()
Overwriting memory_profiler_decorator.py
Agora o executamos usando -m memory_profiles memory_profiler_decorator.py
!python -m memory_profiler memory_profiler_decorator.py
Filename: memory_profiler_decorator.pyLine # Mem usage Increment Occurrences Line Contents=============================================================3 49.5 MiB 49.5 MiB 1 @profile4 def my_function():5 57.0 MiB 7.5 MiB 1 a = [1] * (10 ** 6)6 209.6 MiB 152.6 MiB 1 b = [2] * (2 * 10 ** 7)7 57.2 MiB -152.4 MiB 1 del b8 57.2 MiB 0.0 MiB 1 return a
Como vemos, obtemos o uso de memória de cada linha do script.
Uso de memória ao longo do tempo
Podemos obter um gráfico do uso de memória ao longo do tempo fazendo
mprof run memory_profiler_decorator.py
mprof plot
!mprof run memory_profiler_decorator.py
mprof: Sampling memory every 0.1srunning new processrunning as a Python program...Filename: memory_profiler_decorator.pyLine # Mem usage Increment Occurrences Line Contents=============================================================3 49.5 MiB 49.5 MiB 1 @profile4 def my_function():5 57.0 MiB 7.5 MiB 1 a = [1] * (10 ** 6)6 209.6 MiB 152.6 MiB 1 b = [2] * (2 * 10 ** 7)7 57.2 MiB -152.4 MiB 1 del b8 57.2 MiB 0.0 MiB 1 return a
!mprof plot
Using last profile data.Figure(1260x540)
Ao executá-lo, é criado este gráfico