2010-09-24 16 views
4

Dans mon application Web PHP, j'essaie de limiter le nombre de processus gourmands en ressources processeur/mémoire qui s'exécutent (par exemple, la commande 'convert' d'ImageMagick). J'ai un certain nombre de travaux crons qui exécutent divers scripts qui pourraient potentiellement exécuter trop d'instances de ces processus intensifs CPU/mémoire.Comment limiter le nombre de processus?

Dans ma tentative de limiter de tels processus, je vérifie d'abord si mon système exécute déjà un certain nombre de processus. La fonction:

function has_reached_process_limit($process, $limit) 
{ 
    $command = 'ps -eo comm | grep ' . $process; 
    exec($command, $output, $return); 
    if (count($output) > $limit) 
    { 
     return TRUE; 
    } 
    else 
    { 
     return FALSE; 
    } 
} 

Alors, je lance quelque chose comme ceci:

while (has_reached_process_limit('convert', 5) === TRUE) 
{ 
    // loop over 
} 

Le problème est que lorsque je surveille mon « ressources (via le « OS commande top »), je vois beaucoup plus processus que ce que je m'attends à être en cours d'exécution. Des idées pourquoi?

+0

Quels sont ces LOT plus de processus que vous parlez? Exemple ? – codaddict

+0

Je pense que c'est parce que 'ps' montre aussi des threads et des fourchettes. Donc, si l'un des processus imagemagick utilise 3 threads, il apparaîtra 3 fois. C'est peut-être le problème, mais je ne suis pas sûr de savoir comment vous y remédieriez. Pour être honnête cependant, allez avec la réponse ci-dessous et avoir une file d'attente de travail. – ryeguy

Répondre

2

Je pense que la meilleure approche serait un contrôleur de travail ou une file d'attente de travail ... Cependant, si ce n'est pas possible pour vous parce que vos affaires sont si séparées, votre approche ne semble pas si mauvaise. mais ce que je peux dire à partir d'ici votre commande ps devrait toujours retourner "php" maby son mieux pour vérifier le fichier exécuté ou l'utilisateur ou quelque chose?

De quels autres processus parlez-vous? processus php? à quoi ressemblent-ils, exécutez-vous? vous pouvez également consulter ce lien http://www.php.net/manual/en/function.sem-get.php

0

Ce php usecase a l'extension Sémaphore

resource sem_get (int $key [, int $max_acquire = 1 [, int $perm = 0666 [, int $auto_release = 1 ]]])

http://www.php.net/manual/en/function.sem-get.php

Je pense que cela pourrait fullfill vos besoins, mais sémaphores n'est pas une extension tous les jours afin Je pourrais être que vous avez besoin d'installer cela via --enable-sysvsem commutateur dans php

Questions connexes