[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