Foros del Web » Administración de Sistemas » Unix / Linux »

Limitar uso CPU aplicacion en servidor Linux

Estas en el tema de Limitar uso CPU aplicacion en servidor Linux en el foro de Unix / Linux en Foros del Web. Hola, tengo que ejecutar en mi servidor una aplicacion con un proceso que puede tardar varios minutos. Para no sobrecargar el servidor, quiero limitar el ...
  #1 (permalink)  
Antiguo 22/04/2013, 11:57
Avatar de Pentaxeros  
Fecha de Ingreso: mayo-2008
Mensajes: 173
Antigüedad: 16 años, 6 meses
Puntos: 3
Hola, tengo que ejecutar en mi servidor una aplicacion con un proceso que puede tardar varios minutos.

Para no sobrecargar el servidor, quiero limitar el uso de CPU, y creo que algo me esta fallando, porque cuando me voy al panel del servidor y veo los procesos que se estan ejecutando, me dice que esta usando un 98% de la CPU cuando quiero limitarlo a un 50% o un 25%.

Lo que hago desde PHP en el script es esto:
Código PHP:
$commandJob'./kmakemultires -xmltemplate=./xml/multiframe.xml -config=./multires.config ./pano1/Panorama_r.jpg ./pano1/Panorama_r.jpg ./pano1/Panorama_d.jpg ./pano1/Panorama_u.jpg ./pano1/Panorama_l.jpg ./pano1/Panorama_f.jpg ./pano1/Panorama_b.jpg';

$command $commandJob.' > /dev/null 2>&1 & echo $!'
exec($command ,$op); 
$pid = (int)$op[0]; 
if(
$pid!=""exec("cpulimit --pid $pid --limit 50"); 
La cosa es que el scrip se ejecuta, y funciona, pero se come el 99% de la CPU.

Que estoy haciendo mal???

Gracias!!!

Por cierto mi servidor es CENTOS 6.3 x86_64 kvm

Una cosa, acabo de observar que esto:
> /dev/null 2>&1 & echo $!

hace que el proceso no termine nunca...

Alguna idea de como ejecutar esta aplicacion y limitar el uso de la CPU?

Saludos!

Última edición por BrujoNic; 22/04/2013 a las 12:32
  #2 (permalink)  
Antiguo 23/04/2013, 09:23
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Limitar uso CPU aplicacion en servidor Linux

Primero que nada, y esto nada tiene que ver con UNIX / Linux: la función exec() de PHP espera a que el proceso termine a menos que su salida esté redireccionada y se le indique expresamente que debe ejecutarse en segundo plano.
Tu comando, si bien ejecuta "kmakemultires" en segundo plano, y redirige la salida (correcto), no hace lo mismo con "echo", por lo que el script no avanza hasta que el comando termina. Es por eso que cpulimit no llega a ejecutarse. Ten en cuenta también que es recomendable escribir la ruta completa hacia los programas, ya que nada te garantiza que cpulimit esté en el PATH del usuario que ejecuta tu programa.

Supongo que una solución posible es redirigir también la salida de echo hacia un archivo, y leer de ese archivo el PID. Pero eso es pura y exclusivamente asunto de PHP.

Si fuera tu, escribiría el programa entero como un script de shell, y en caso de ser necesario ejecutaría ese script desde PHP. Creo que sería tan sencillo como

script.sh
Código BASH:
Ver original
  1. #!/bin/sh
  2. ./kmakemultires -xmltemplate=./xml/multiframe.xml -config=./multires.config ./pano1/Panorama_r.jpg ./pano1/Panorama_r.jpg ./pano1/Panorama_d.jpg ./pano1/Panorama_u.jpg ./pano1/Panorama_l.jpg ./pano1/Panorama_f.jpg ./pano1/Panorama_b.jpg > /dev/null 2>&1 &
  3.  
  4. cpulimit --pid $! --limit 50

script.php
Código PHP:
Ver original
  1. exec("script.sh");

Saludos.

Última edición por AlvaroG; 23/04/2013 a las 09:30
  #3 (permalink)  
Antiguo 25/04/2013, 06:51
Avatar de Pentaxeros  
Fecha de Ingreso: mayo-2008
Mensajes: 173
Antigüedad: 16 años, 6 meses
Puntos: 3
Respuesta: Limitar uso CPU aplicacion en servidor Linux

Gracias! Probare y te cuento.

Si funcionara, la unica pega es que tendria que crear ese archivo (script.sh) en cada ocasion, pero eso es un mal menor.

Ya dire si funciona!

Saludos!
  #4 (permalink)  
Antiguo 25/04/2013, 08:25
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Limitar uso CPU aplicacion en servidor Linux

Siempre podés también parametrizar el script, de forma tal que reciba todo lo que requiera a través de la línea de comandos.

Algo como

script.sh
Código BASH:
Ver original
  1. ./miprograma $1

script.php
Código PHP:
Ver original
  1. exec('script.sh "mis parametros"');

Etiquetas: aplicacion, cpu, ip, limitar, linux, php, servidor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:02.