¿Cómo diagnostico que mi programa de Python se eliminó debido a un error de falta de memoria?

He estado construyendo una red neuronal que analiza grandes cantidades de datos (40 G) y mi iMac interrumpe el proceso después de haber estado funcionando durante aproximadamente un día.

En el pasado, en Linux, creé un gran archivo de intercambio para sortear las limitaciones de memoria.

Veo:

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

He llegado a conocer esto como el mensaje "has usado demasiada memoria, adiós". Nuevamente, pude resolverlo usando un archivo de intercambio grande en Linux. ¿Cómo puedo aumentar el límite de intercambio en mi Mac para que mis procesos que usan grandes cantidades de memoria no se eliminen?

No estoy seguro de cómo podría obtener más información sobre por qué lo mataron.

¿Podría editar exactamente los mensajes del sistema que se registran cuando se cancela el proceso? ¿Cuál es el estado de la memoria en ese momento (quizás 5 minutos antes y 5 minutos después de la finalización?) Supongo que tiene otro problema, ya que el intercambio puede y crecerá para ocupar todo el espacio en el volumen de arranque, pero por lo general es el programa culpa de tener tanta RAM intercambiada y nunca volver a entrar.
Se agregaron algunas ediciones arriba.
Buenas ediciones. Dado que lo está ejecutando desde un shell, también considere mirar ulimit -aNo tengo un caso de prueba en el que pueda hacer que el sistema se ahogue en 10.10.x Además, observe la presión de la memoria

Respuestas (2)

Aquí hay algunas formas de verificar si hay problemas, pero me temo que pueden no ser una solución completa o incluso correcta sin mirar o hurgar más:

En otro shell después de iniciar su proceso de python (o si usted screen/ tmuxél):

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

Una vez que tenga una buena línea de base, puede observar las cosas a lo largo del tiempo para ver cómo se comporta la red neuronal cada hora durante un tiempo. Si cree que las cosas están a punto de detenerse, puede ejecutar sysdiagnose python(o usar el proceso # si tiene más de un proceso de python en ejecución). Además, si no desea esperar el día en que las cosas aumenten, puede infligir memory_pressureen el sistema antes o después de iniciar la red neuronal en python. Consulte esta respuesta para saber cómo monitorear el Monitor de actividad cuando ejecuta este proceso:

Impresionante, gracias por esto. Jugaré con él a ver qué encuentro.
Estoy bastante seguro de que te refieres df /a donde escribistedf \
@PascalCuoq Tienes razón. Siéntase libre de editar publicaciones donde este sea el caso en el futuro :-) Sin embargo, a veces, el sistema está de mal humor con las pequeñas ediciones.
@bmike Sí, en los sitios SE donde uno solo comienza con 100 de reputación, uno necesita encontrar al menos 6 caracteres para cambiar para que la edición se considere significativa e ingrese a revisión. Lo he hecho pero puede ser un tirón de pelo: crypto.stackexchange.com/posts/18651/revisions

es SIGKILLEd. Es difícil decir que es OOM en macOS desde quetail -f /var/log/system.log

 Jan 14 10:46:39 ... com.apple.xpc.launchd[1] (com.apple.mdworker.shared.10000000-0000-0000-0000-000000000000[41845]):           Service exited due to SIGKILL | sent by mds[72]

El mensaje de error no ayuda.

Luego probé Instrumentenviado con macOS,

ingrese la descripción de la imagen aquí

Y adjunte el instrumento a su proceso de Python. Puedes ver que la memoria no tiene límites hasta que se elimina.

ingrese la descripción de la imagen aquí