• Publicidad

Consumo de recursos

¿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.

Consumo de recursos

Notapor Lor » 2008-04-28 14:45 @656

Agradecería, si alguien me pudiese orientar cómo detectar consumo de recursos al ejecutar un Perl.
Tengo una aplicación que accede y trabaja con Mysql. La aplicación con poca carga funciona correctamente. Pero al aumentar el tamaño de los arreglos que la conforman queda trabajando indefinidamente y no hace lo que tendría que hacer. ¿Existe algún límite en el tamaño de las variables (longitud de arreglos)? ¿Cómo puedo testear dónde esta el problema?

Muchas gracias. :D
Lor
Perlero nuevo
Perlero nuevo
 
Mensajes: 187
Registrado: 2005-04-28 05:47 @282

Publicidad

Notapor kidd » 2008-04-28 14:52 @661

Hola,

La cantidad de datos que puede contener una variable de Perl está directamente relacionada con la cantidad de memoria que tiene tu máquina. Es decir, en teoría las variables de Perl pueden ser tan grandes como tu memoria lo permita.

Para realizar la optimización que necesitas en tu script, primero debes de realizar un benchmark del mismo para ver en qué parte está el cuello de botella. Para ello existen algunos módulos como el Benchmark.

http://perlenespanol.com/tutoriales/mod ... hmark.html

Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor explorer » 2008-04-28 19:12 @842

¿En qué sistema operativo estás trabajando?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Lor » 2008-04-29 05:15 @260

Estoy trabajando bajo Windows, es el sistema optado por mi cliente.
Lor
Perlero nuevo
Perlero nuevo
 
Mensajes: 187
Registrado: 2005-04-28 05:47 @282

Notapor explorer » 2008-05-01 10:12 @466

Como dijo kidd, el límite es la memoria.

Ahora bien, en un programa Perl hay constantes movimientos de memoria, al crear y destruir nuevas variables o espacios temporales que al final irán a parar a las variables (o no).

Y el tiempo de gestión de memoria puede venir influido por el sistema operativo.

Mi propia experiencia, el año pasado, con un Windows 2000 Profesional y 2003 Server fue desastrosa. Con 1Gb de memoria RAM era casi imposible realizar operaciones con estructuras de datos que almacenaban la información de 2 millones de personas, en forma de array de hashes o hashes de hashes.

En cambio, en el ordenador de Linux que teníamos de pruebas, ni se inmutaba.

En Windows, era imposible que un proceso superara los 700Mb, pues a partir de ese momento la máquina entraba en el proceso de intercambiar páginas de memoria con la memoria cache en disco. Así, un proceso que debería tardar 7 u 8 minutos de ejecución, se alargaba más de 3 horas.

La decisión de los jefes fue muy clara: o gastamos dinero en 1Gb más de memoria o nos pasamos a Linux.

Bueno, 1Gb de memoria no es muy caro, pero dejar de pagar miles de euros al año en licencias Microsoft, sí que era atractivo.

En cuanto a tu problema: mantén en pantalla el Administrador de Tareas (o de Procesos) y fíjate en la cantidad de memoria usada, memoria reservada, memoria en caché y memoria total que tu programa está ocupando. Si llega al límite, la cpu empezará a bajar, mientras que todo el tiempo de ese procesador se dedicará a mover la información entre disco duro y memoria. Si ocurre eso, hay que aplicar algunas técnicas, repasando el código, línea a línea, para detectar dónde se nos va. Ejemplo: no usar bucles for o foreach para procesar los registros, porque un efecto de ellos es que mantienen en memoria a todos ellos, mientras que con un bucle while solo se mantiene un registro cada vez.

Si quieres hacer un análisis más exhaustivo, puedes usar algunos módulos que dan información sobre la memoria ocupada. Uno de ellos es Devel::Size. Con las funciones size y total_size puedes saber cuánto ocupan tus estructuras. Tienes más detalles en Mastering Perl, en la sección Memory use.

Para aún mas detalle, debes recompilar el intérprete Perl con la opción -DDEBUGGING_MSTATS; luego, con la opción mstat() del módulo Devel::Peek. Pero usa solo esa versión para hacer mediciones, no para el trabajo normal, ya que la activación de esa opción de depurado enlentece todo el intérprete perl.

Tienes una presentación de brian d foy con una introducción a estos temas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Lor » 2008-05-01 14:52 @661

Explorer, muchas gracias por el tiempo que te has tomado para responderme. Tus consejos me son muy valederos.

¡¡¡ Muchas gracias !!!
Lor
Perlero nuevo
Perlero nuevo
 
Mensajes: 187
Registrado: 2005-04-28 05:47 @282


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 15 invitados

cron