[Madrid-pm] Feliz año nuevo, y una cuestion

Nacho nacho en sandboxed.org
Jue Ene 8 07:11:47 PST 2009


Jose Manuel de Arce escribió:
> Estimados,
> 
> lo primero, felicitar el año nuevo a todos.

Feliz año!

> Ahora me animo a describir una situación por si alguien ha tenido una
> experiencia parecida.
> 
> En linux, slackware, una serie de scripts (en perl, claro) que leen
> correo por pop3 y procesan los mensajes se invocan por cron cada
> cierto tiempo (5 minutos). Graban algunos ficheros en disco y ya. Esto
> funciona desde principios de Diciembre, y al cabo de un tiempo
> variable, desde 10 días hasta 2 días, el binario perl ya no funciona,
> cualquier invocacion se salda con un "Segmentation Fault".

¿Podrías pasar los scripts adjuntos en un correo? Quizás el problema 
esté en cómo se declaran las variables ó cuánta información se almacena 
en ellas. Basta con que se consuma más memoria de lo esperado para 
provocar un fallo de segmentación.

> desde el shell, haciendo perl -v, segmentation fault. El resto de
> procesos funciona sin problema y se pueden lanzar otros binarios.

Revisa este post en perlmonks, quizás pueda ayudarte. ¿Qué peso tienen 
los scripts a nivel de consumo de recursos?

http://www.perlmonks.org/?node_id=651966

"It is possible to get segmentation faults by exceeding the maximum 
memory in perl.

In theory this could also happen with a bad Storable file, i.e. if some 
wrong length parameter causes memory overflow..."

> un strace, que es lo que he sabido hacer, (strace perl -v) termina con:
> .
> .
> .
> mmap2(NULL, 178476, PROT_READ, MAP_PRIVATE, 3, 0) = 0x401d3000
> close(3)                                = 0
> open("/dev/urandom", O_RDONLY|O_LARGEFILE) = 3
> read(3, "\t\234\224\246", 4)            = 4
> close(3)                                = 0
> time([1231407045])                      = 1231407045
> mmap2(NULL, 135462912, PROT_READ|PROT_WRITE,
> MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x401ff000
> --- SIGSEGV (Segmentation fault) @ 0 (0) ---
> +++ killed by SIGSEGV +++
> 
> Y no tengo otra forma de recuperar la situacion que rebotando.
> 
> Parece que algo queda en memoria, sticky, entre invocaciones. los
> scripts terminan con normalidad hasta que dejan de hacerlo, y ya no se
> puede usar perl.
> 
> Parece que el uso repetido,, via cron, y la invocacion muchas veces,
> dejara algo en memoria, o en cache, o no sé dónde, que no puedo
> vaciar, y provoca lo que describo.
> 
> Alguna pista de como evitar esto o como corregir esta situacion sin rebotar?

No tengo mucha idea de perl, pero espero que pueda servirte de ayuda.
Feliz año a todos.



Más información sobre la lista de distribución Madrid-pm