Página 1 de 1

Trabajar con ficheros de texto "grandes": Terminado (killed)

NotaPublicado: 2011-11-15 04:47 @241
por otorices
Buenas.

Tengo un programa que trabaja con un fichero de texto bastante "pesado" (casi 50MB de texto). Su función es ir leyendo su contenido para ser analizado por un analizador de textos y escribir el resultado del análisis en otro fichero.

El caso es que la ejecución se interrumpe al cabo de poco tiempo y muestra el mensaje "Terminado (killed)".

¿A qué se debe? ¿Cómo puedo hacer para que no se interrumpa la ejecución?

Muchas gracias.

Re: Trabajar con ficheros de texto "grandes": Terminado (killed)

NotaPublicado: 2011-11-15 04:59 @249
por explorer
Pero... ¿se muere o lo matan? Por el mensaje, se ve que el programa realmente se interrumpe porque ha sido asesinado (killed).

La cuestión es ¿quién lo ha matado?

¿Quizás el propio sistema operativo porque ha excedido los límites marcados por ulimit? ¿Quizás porque ha reservado más memoria de la que tiene el sistema? ¿O quizás porque estaba siendo ejecutado por el servidor web y ha superado el tiempo de ejecución?

Pues eso... debes primero decirnos quién arranca y dónde se ejecuta el programa... y encontrarás al responsable de este crimen.

Re: Trabajar con ficheros de texto "grandes": Terminado (killed)

NotaPublicado: 2011-11-15 05:07 @255
por otorices
Lo ejecuto en mi máquina localmente. Eso sí, lo estoy ejecutando dentro de una máquina virtual de Ubuntu, ya que el analizador de textos solo lo tengo disponible en ese sistema operativo. Le he asignado 1GB de memoria principal al la imagen de Ubuntu. Al ejecutar el comando "ulimit" me devuelve "unlimited".

Re: Trabajar con ficheros de texto "grandes": Terminado (killed)

NotaPublicado: 2011-11-15 05:16 @261
por explorer
Debes ejecutar ulimit -a para ver todos los límites que el sistema te impone.

Re: Trabajar con ficheros de texto "grandes": Terminado (killed)

NotaPublicado: 2011-11-15 06:55 @330
por otorices
He ejecutado ulimit -a y me devuelve:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7906
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7906
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Re: Trabajar con ficheros de texto "grandes": Terminado (killed)

NotaPublicado: 2011-11-15 08:44 @406
por explorer
Pues yo solo veo valores normales. Quizás el de 64 es un poco bajo, porque yo tengo 2048 en mi máquina, pero no creo que sea eso...

Cuando lo ejecutas, ¿siempre se para en el mismo sitio y/o cuando pasa la misma cantidad de tiempo?

Re: Trabajar con ficheros de texto "grandes": Terminado (killed)

NotaPublicado: 2011-11-15 09:28 @436
por otorices
Lo he vuelto a ejecutar haciendo alguna optimización en el código y ahora ha "aguantado". :?

Sin más.

¡Muchas gracias!

Re: Trabajar con ficheros de texto "grandes": Terminado (killed)

NotaPublicado: 2011-11-25 05:20 @264
por salva
Que un proceso se quede sin memoria no hace que el sistema operativo lo mate. Cuando no hay memoria las llamadas a malloc fallan y al nivel de Perl esto normalmente se manifiesta como un mensaje "Out of memory" o en el peor de los casos un SIGSEGV.

Lo que sí mata procesos en Linux es el OOM-Killer (Out Of Memory Killer) que corre cuando el sistema operativo permite que entre todos los procesos reserven más memoria del total de la que dispone la máquina entre RAM y swap (memory overcommit) y éstos, en algún momento acaban realmente requiriendo más de la que está disponible (en la práctica por el COW, los procesos suelen usar mucha menos memoria de la que reservan). Pero desde hace ya tiempo el overcommit de memoria viene deshabilitado por defecto (puede verse si está activado corriendo cat /proc/sys/vm/overcommit_memory). En cualquier caso, las acciones del OOM-Killer aparecen en los logs del sistema.

En este enlace hay bastante documentación de cómo funciona el sistema de memoria virtual de Linux: http://linux-mm.org/LinuxMMDocumentation