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.
_______________________________________________
Madrid-pm mailing list
[email protected]
http://mail.pm.org/mailman/listinfo/madrid-pm