Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Diabliyo en 19 Marzo 2012, 02:49 am



Título: [Rendimiento] ejecucion de un script por mucho tiempo !???
Publicado por: Diabliyo en 19 Marzo 2012, 02:49 am
Buenas.

Tengo un servidor el cual realiza ciertas tareas y hasta ahorita todo marcha bien... El detalle es que estoy por implementar una nueva actividad, por lo cual requiero que mi servidor ejecute algo durante 12 horas, pero no es una ejecucion constante del archivo (que este procesando), sino que de esas 12 horas, va a ejecutarse digamos 1 minutos y va a dormir 11 minutos, despues ejecuta otra vez 1 minutos y dormir 11 minutos, al completarse 6 horas (la mitad) dormira por 30 minutos (1 hora), y se volve a ejecutar una tarea de 1 minutos y dormir 11 minutos, etc, etc.... finalizara a las 12 horas de ejecucion.

Tengo el codigo en dos lenguajes, en PHP y en C, en ambos para dormir uso "sleep()", el detalle es que, nose si esto vaya a afectar a mi servidor, ya que este mismo server me sirve de DNS y HTTP.... ya que no tengo un segundo server que haga esta tarea.

Ya sea el code en PHP o C, estos se piensan invocar automaticamente a la misma hora usando CRON y el modo de ejecucion a realizar es:

Código:
# usando el code PHP
shell# php /root/public_html/tareas.php usuario clave mi_tarea

# o bien usando el code en C
shell# /root/public_html/mitarea -u usuario -p clave -d mi_tarea

Actualmente mi server atiende aproximadamente 2,500 visitas mensuales.

Ustedes que opinan ?

NOTA: ya se como hacerlo, solo quiero su recomendacion si el proceso se ejecuta tanto tiempo, consumira mi server ?

Saludos !


Título: Re: [Rendimiento] ejecucion de un script por mucho tiempo !???
Publicado por: mokoMonster en 19 Marzo 2012, 06:39 am
Por que no usas mejor las Tareas Programadas?


Título: Re: [Rendimiento] ejecucion de un script por mucho tiempo !???
Publicado por: Diabliyo en 19 Marzo 2012, 13:36 pm
Por que no usas mejor las Tareas Programadas?

??? no te entiendo, porfavor explicate mas... es dificil para mi bola magica leer la realidad del mensaje xD :D


Título: Re: [Rendimiento] ejecucion de un script por mucho tiempo !???
Publicado por: Pablo Videla en 19 Marzo 2012, 14:30 pm
??? no te entiendo, porfavor explicate mas... es dificil para mi bola magica leer la realidad del mensaje xD :D

crontab, busca sobre eso, puede que te ayude


Título: Re: [Rendimiento] ejecucion de un script por mucho tiempo !???
Publicado por: Diabliyo en 19 Marzo 2012, 14:32 pm
crontab, busca sobre eso, puede que te ayude

Ya se que es crontab, y se como usarlo, la pregunta va sobre recomendacion...

Lee bien mi post porfavor, no busco me digan como hacer las cosas, sino su opinion sobre si lo hago, se consumira mucho el server ?

Saludos !


Título: Re: [Rendimiento] ejecucion de un script por mucho tiempo !???
Publicado por: mokoMonster en 19 Marzo 2012, 16:57 pm
Ya se que es crontab, y se como usarlo, la pregunta va sobre recomendacion...

Lee bien mi post porfavor, no busco me digan como hacer las cosas, sino su opinion sobre si lo hago, se consumira mucho el server ?

Saludos !

Claro que se consumiría el server, eso dejando a un lado en donde lo ejecutarías, es decir, si tienes tu propio server que obviamente tiene que estar up las 24hrs ps no le veo mucho problema pero intenta dejar un programa corriendo por 12 hrs seguidas haciendo sleep varias veces y ve la memoria que esta ocupando la tarea, vamos tío, con CronJobs te ahorarrias muchas cosas, solo tendrías que hacer que se ejecute el programa de 1 minuto cada determinado tiempo y te ahorras el sleep y tanta cagada... Y si sabes bien sobre CronJobs sabes que aparte de que puedes poner diferentes tareas hasta cada minuto y no hay ningún problema ya que tiene un muy buen manejo de recursos (a menos de que quieras hacer el tuyo xD).

Mas claro: mi recomendación -> UsaCronJobs(!!);

Salduos!


Título: Re: [Rendimiento] ejecucion de un script por mucho tiempo !???
Publicado por: ~ Yoya ~ en 20 Marzo 2012, 00:50 am
Supongo que si o por lo menos memoria. Recuerda que PHP librera memoria automáticamente al finalizar el script, una opción también es comenzar a liberar memoria antes de entrar al sleep.


Título: Re: [Rendimiento] ejecucion de un script por mucho tiempo !???
Publicado por: Diabliyo en 21 Marzo 2012, 01:12 am
Supongo que si o por lo menos memoria. Recuerda que PHP librera memoria automáticamente al finalizar el script, una opción también es comenzar a liberar memoria antes de entrar al sleep.

Esa si no me la sabia, me darias mas info de esto ?
Crees que seria el mismo problema si corriese el script de C ?

Claro que se consumiría el server, eso dejando a un lado en donde lo ejecutarías, es decir, si tienes tu propio server que obviamente tiene que estar up las 24hrs ps no le veo mucho problema pero intenta dejar un programa corriendo por 12 hrs seguidas haciendo sleep varias veces y ve la memoria que esta ocupando la tarea, vamos tío, con CronJobs te ahorarrias muchas cosas, solo tendrías que hacer que se ejecute el programa de 1 minuto cada determinado tiempo y te ahorras el sleep y tanta cagada... Y si sabes bien sobre CronJobs sabes que aparte de que puedes poner diferentes tareas hasta cada minuto y no hay ningún problema ya que tiene un muy buen manejo de recursos (a menos de que quieras hacer el tuyo xD).

Mas claro: mi recomendación -> UsaCronJobs(!!);

Salduos!

Usaria cronjobs el detalle es que el programa en PHP o C (lo tengo en ambos lenguajes), consulta de la BDD y segun el numero de tareas, realiza un calculo asi como:

Código
  1. $cons= consultar( "NOTIFICACIONES" ); # obtiene todas las notificaciones
  2. $cont= mysql_num_rows($cons); # numero de notificaciones del dia a realizar
  3. $horas= 6; # en solo 6 horas deben salir todas las notificaciones
  4. $rango= (($horas*60)*60)/($cont); # tiempo de espera (en segundos) entre cada notificacion
  5.  
  6. while( $buf=mysql_fetch_array($cons) )
  7.          {
  8.          enviar_notificacion_por_socket( $buf );
  9.          sleep($rango); # dormir
  10.          }

Podrian opinar que envie todas las notificaciones de palmo, pero no puedo, tengo que hacerlo paulatinamente !

Como ven es impredecible el numero de notificaciones que el sistema tendria que hacer, igual y es solo 1, o bien podrian ser 100 (o mas)...

Les repito, el codigo lo tengo en C y PHP, si corro el script con cron, veo que muchos opinan que el script en PHP consumira ram, pero... si fuese en C, creen que seria mejor ? o seria lo mismo ?

Que me recomiendan ?


Título: Re: [Rendimiento] ejecucion de un script por mucho tiempo !???
Publicado por: ~ Yoya ~ en 26 Marzo 2012, 05:42 am
pues eliminando variables, arrays, recursos, etc... Asi liberas memoria.

Quizas muestro un PoC pero de momento no tengo mi fedora para probar y paso de hacerlo en window.

Igual, si lo tienes en c y php, yo elejiria C...

saludos.


Título: Re: [Rendimiento] ejecucion de un script por mucho tiempo !???
Publicado por: mokoMonster en 28 Marzo 2012, 06:10 am
Esa si no me la sabia, me darias mas info de esto ?
Crees que seria el mismo problema si corriese el script de C ?

Usaria cronjobs el detalle es que el programa en PHP o C (lo tengo en ambos lenguajes), consulta de la BDD y segun el numero de tareas, realiza un calculo asi como:

Código
  1. $cons= consultar( "NOTIFICACIONES" ); # obtiene todas las notificaciones
  2. $cont= mysql_num_rows($cons); # numero de notificaciones del dia a realizar
  3. $horas= 6; # en solo 6 horas deben salir todas las notificaciones
  4. $rango= (($horas*60)*60)/($cont); # tiempo de espera (en segundos) entre cada notificacion
  5.  
  6. while( $buf=mysql_fetch_array($cons) )
  7.          {
  8.          enviar_notificacion_por_socket( $buf );
  9.          sleep($rango); # dormir
  10.          }

Podrian opinar que envie todas las notificaciones de palmo, pero no puedo, tengo que hacerlo paulatinamente !

Como ven es impredecible el numero de notificaciones que el sistema tendria que hacer, igual y es solo 1, o bien podrian ser 100 (o mas)...

Les repito, el codigo lo tengo en C y PHP, si corro el script con cron, veo que muchos opinan que el script en PHP consumira ram, pero... si fuese en C, creen que seria mejor ? o seria lo mismo ?

Que me recomiendan ?

Y que pasa cuando acaba con la primera "notificacion"? Si sigue con la segunda o se queda en sleep?


Título: Re: [Rendimiento] ejecucion de un script por mucho tiempo !???
Publicado por: ~ Yoya ~ en 3 Abril 2012, 15:17 pm
Aquí un ejemplo que hice, después de instalar debian xD.

Código
  1. <?php
  2.  
  3. echo "Memoria inicial -> ". memory_usage();
  4.  
  5. $hola  = '111111AAAA????//***';
  6. $array = array(1,'1¿Ç$Q#$$%GGGGD11¿Ç$Q#$$%GGGGD11¿Ç$Q#$$%GGGGD11',3,8,'WWWWW', '¿Ç$Q#$$%GGGGD11¿Ç$Q#$$%GGGGD11¿Ç$Q#$$%GGGGD11¿Ç$Q#$$%GGGGD11');
  7.  
  8. $xd = '¿Ç$Q#$$%GGGGD11¿Ç$Q#$$%GGGGD11¿Ç$Q#$$%GGGGD11¿Ç$Q#$$%GGGGD11¿Ç$Q#$$%GGGGD11¿Ç$Q#$$%GGGGD11¿Ç$Q#$$%GGGGD11¿Ç$Q#$$%GGGGD11¿Ç$Q#$$%GGGGD11¿Ç$Q#$$%GGGGD11¿Ç$Q#$$%GGGGD11';
  9.  
  10. echo "Memoria al crear algunas variables -> ".memory_usage();
  11.  
  12. echo "\n[+]Eliminando variables para poder liberar mas memoria\n\n";
  13.  
  14. unset($hola, $array, $xd);
  15.  
  16. echo "Memoria despues de liberar -> ". memory_usage();
  17. function memory_usage() {
  18.  
  19. return number_format((memory_get_usage()/1024),2)." kbs\n";
  20. }
  21.  
  22. ?>
  23.  

Salida:
Código:
yoya@Debian:~/www/public$ php index.php 
Memoria inicial -> 116.32 kbs
Memoria al crear algunas variables -> 117.07 kbs

[+]Eliminando variables para poder liberar mas memoria

Memoria despues de liberar -> 116.34 kbs