• Publicidad

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

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

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

Notapor otorices » 2011-11-15 04:47 @241

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.
otorices
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 41
Registrado: 2009-04-16 13:59 @624

Publicidad

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

Notapor explorer » 2011-11-15 04:59 @249

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.
JF^D Perl Programming Language
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 12852
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

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

Notapor otorices » 2011-11-15 05:07 @255

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".
otorices
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 41
Registrado: 2009-04-16 13:59 @624

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

Notapor explorer » 2011-11-15 05:16 @261

Debes ejecutar ulimit -a para ver todos los límites que el sistema te impone.
JF^D Perl Programming Language
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 12852
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

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

Notapor otorices » 2011-11-15 06:55 @330

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.001 segundos, usando GeSHi 1.0.8.4
otorices
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 41
Registrado: 2009-04-16 13:59 @624

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

Notapor explorer » 2011-11-15 08:44 @406

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?
JF^D Perl Programming Language
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 12852
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

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

Notapor otorices » 2011-11-15 09:28 @436

Lo he vuelto a ejecutar haciendo alguna optimización en el código y ahora ha "aguantado". :?

Sin más.

¡Muchas gracias!
otorices
Perlero Nuevo
Perlero Nuevo
 
Mensajes: 41
Registrado: 2009-04-16 13:59 @624

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

Notapor salva » 2011-11-25 05:20 @264

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
Avatar de Usuario
salva
Perlero Frecuente
Perlero Frecuente
 
Mensajes: 197
Registrado: 2008-01-03 15:19 @680


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado