Como diagnosticar meu programa Python sendo morto devido a um erro de falta de memória?

4

Estou construindo uma Rede Neural que analisa grandes quantidades de dados (40G), e meu iMac mata o processo depois que ele está em execução há cerca de um dia.

No passado, no Linux, criei um grande arquivo de troca para contornar as limitações de memória.

Entendo:

$ python processor.py
[...maybe some std out messages, specific to what I'm doing...]
Killed.

Eu vim a conhecer isso como a mensagem "você gastou muita memória, adeus". Mais uma vez, consegui resolvê-lo usando um grande arquivo de permuta no linux. Como posso aumentar o limite de troca no meu mac para que meus processos que usam grandes quantidades de memória não sejam mortos?

Não tenho certeza de como eu poderia obter mais informações sobre o motivo de ter sido morto.

Entre
fonte
2
Você pode editar exatamente as mensagens do sistema registradas quando o processo é encerrado? Qual é o status da memória naquele momento (talvez 5 minutos antes e 5 minutos após o término?) Meu palpite é que você tem outro problema, pois o swap pode e aumentará para ocupar todo o espaço no volume de inicialização, mas geralmente é o programa. falha em ter tanta RAM trocada e nunca mais voltar.
bmike
11
Adicionadas algumas edições acima.
Entre o
Edições agradáveis. Como você o está executando a partir de um shell, considere também a possibilidade de ulimit -anão ter um caso de teste em que eu possa causar o bloqueio do sistema na versão 10.10.x. Observe também a pressão
bmike

Respostas:

5

Aqui estão algumas maneiras de verificar se há problemas, mas receio que eles não sejam uma solução completa ou mesmo a correta, sem mais espreitar ou cutucar:

Em outro shell depois de iniciar seu processo python (ou se você screen/ tmuxele):

  1. df /
  2. top -l 1 -S | head -12
  3. vm_stat e vm_stat 600
  4. sudo du -sm /var/vm/*

Depois de ter uma boa linha de base, você pode observar as coisas ao longo do tempo para ver como a rede neural está se comportando a cada hora por um tempo. Se você acha que as coisas estão prestes a parar, você pode executar sysdiagnose python(ou usar o processo # se tiver mais de um processo python em execução). Além disso, se você não quiser esperar o dia inteiro para aumentar as coisas, poderá infligir memory_pressureao sistema antes ou depois de iniciar a rede neural em python. Veja esta resposta para saber como monitorar o Monitor de Atividade ao executar este processo:

bmike
fonte
Incrível, obrigado por isso. Vou brincar com ele e ver o que encontro.
Entre
11
Tenho a certeza que você quer dizer df /que você escreveudf \
Pascal Cuoq
@PascalCuoq Você está certo. Sinta-se à vontade para editar postagens onde este for o caso no futuro :-) Às vezes, o sistema está irritadiço com pequenas edições.
Bmike
@bmike Sim, nos sites do SE em que se está começando apenas com 100 reputação, é necessário encontrar pelo menos 6 caracteres para alterar para que a edição seja considerada significativa e entre na revisão. Eu tenho feito isso, mas pode ser-puxando o cabelo: crypto.stackexchange.com/posts/18651/revisions
Pascal Cuoq