Existe uma maneira de um programa Python determinar quanta memória está usando atualmente? Vi discussões sobre o uso de memória para um único objeto, mas o que preciso é de uso total de memória para o processo, para poder determinar quando é necessário começar a descartar dados em cache.
python
memory-management
rwallace
fonte
fonte
psutil
é multiplataforma e pode retornar os mesmos valores como aps
ferramenta de linha de comando: pythonhosted.org/psutil/#psutil.Process.memory_infopsutil
) atualmente suporta Linux, Windows, OSX, FreeBSD e Sun Solaris, arquiteturas de 32 e 64 bits, com versões em Python de 2.6 a 3.4" da Documentaçãopsutil
,psutil.Process()
é equivalente apsutil.Process(os.getpid())
. É uma coisa a menos que você precisa se lembrar de digitar.Para sistemas baseados em Unix (Linux, Mac OS X, Solaris), você pode usar a
getrusage()
função no módulo de biblioteca padrãoresource
. O objeto resultante possui o atributoru_maxrss
, que fornece o pico de uso de memória para o processo de chamada:Os documentos do Python não anotam as unidades. Consulte a página do seu sistema específico
man getrusage.2
para verificar o valor da unidade. No Ubuntu 18.04, a unidade é anotada como kilobytes. No Mac OS X, são bytes.A
getrusage()
função também pode ser fornecidaresource.RUSAGE_CHILDREN
para obter o uso para processos filho e (em alguns sistemas)resource.RUSAGE_BOTH
para o uso total (próprio e filho) do processo.Se você se preocupa apenas com o Linux, pode ler alternativamente o arquivo
/proc/self/status
ou/proc/self/statm
conforme descrito em outras respostas para esta pergunta e esta também.fonte
No Windows, você pode usar o WMI ( home page , cheeseshop ):
No Linux (do livro de receitas python, http://code.activestate.com/recipes/286222/ :
fonte
return int(result[0].WorkingSet)
No unix, você pode usar a
ps
ferramenta para monitorá-lo:onde 1347 é alguma identificação de processo. Além disso, o resultado está em MB.
fonte
Uso atual da memória do processo atual no Linux , para Python 2 , Python 3 e pypy , sem nenhuma importação:
Ele lê o arquivo de status do processo atual, pega tudo depois
VmRSS:
e depois tudo antes da primeira nova linha (isolando o valor do VmRSS) e, por fim, corta os últimos 3 bytes que são um espaço e a unidade (kB).Para retornar, retira qualquer espaço em branco e o retorna como um número.
Testado no Linux 4.4 e 4.9, mas mesmo uma versão antiga do Linux deve funcionar: procurando
man proc
e procurando as informações no/proc/$PID/status
arquivo, ele menciona versões mínimas para alguns campos (como Linux 2.6.10 para "VmPTE"), mas o "VmRSS "O campo (que eu uso aqui) não tem essa menção. Portanto, suponho que ele esteja lá desde uma versão inicial.fonte
Eu gosto lo , obrigado por @bayer. Agora, recebo uma ferramenta específica de contagem de processos.
Anexe minha lista de processos.
Referência
fonte
ps aux | awk '/python/{sum+=$6}; END {print sum/1024 " MB"}'
Para Python 3.6 e psutil 5.4.5, é mais fácil usar a
memory_percent()
função listada aqui .fonte
Mais fácil, mesmo de usar do que
/proc/self/status
:/proc/self/statm
. É apenas uma lista delimitada por espaço de várias estatísticas . Não consegui dizer se os dois arquivos estão sempre presentes.Aqui está um exemplo simples:
Isso produz uma lista que se parece com isso:
Você pode ver que ele salta cerca de 300.000 bytes após aproximadamente três alocações de 100.000 bytes.
fonte
Abaixo está o meu decorador de funções, que permite rastrear quanta memória esse processo consumiu antes da chamada de função, quanta memória ele usa após a chamada de função e quanto tempo a função é executada.
Então, quando você tem alguma função decorada com ela
Você poderá ver esta saída:
fonte
fonte
Para sistemas Unix, o comando
time
(/ usr / bin / time) fornece essas informações se você passar -v. VejaMaximum resident set size
abaixo, qual é a memória real máxima (pico) real (não virtual) usada durante a execução do programa :fonte
time
vez de/usr/bin/time
. Veja: askubuntu.com/questions/434289/…Usando sh e os para obter a resposta do python bayer.
A resposta está em megabytes.
fonte