Как ограничить количество процессов? - PullRequest
4 голосов
/ 24 сентября 2010

В моем веб-приложении на PHP я пытаюсь ограничить количество процессов, интенсивно использующих процессор / память (например, команда ImageMagick 'convert').У меня есть несколько заданий crons, которые выполняют различные сценарии, которые потенциально могут выполнять слишком много экземпляров этих процессов, интенсивно использующих процессор / память.

В своей попытке ограничить такие процессы я сначала проверяю, установлена ​​ли моя системазапуск определенного количества процессов.Функция:

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;
    }
}   

Итак, я запускаю что-то вроде этого:

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

Проблема в том, что когда я наблюдаю за ресурсами моей ОС (с помощью команды top), яувидеть гораздо больше процессов, чем я ожидаю.Есть идеи почему?

Ответы [ 2 ]

2 голосов
/ 24 сентября 2010

Я думаю, что более подходящим подходом был бы контроллер работы или очередь заданий ... Однако, если это невозможно для вас, потому что ваши вещи настолько отделены, ваш подход выглядит так плохо. но что я могу сказать отсюда, ваша команда ps всегда должна просто возвращать "php", чтобы лучше проверять исполняемый файл или пользователя или что-то еще?

О ЛОТЕ других процессах ты говоришь? php процессы? как они выглядят, выполнить? Вы также можете проверить эту ссылку http://www.php.net/manual/en/function.sem-get.php

0 голосов
/ 24 сентября 2010

Для этого варианта использования php имеет расширение семафора

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

Я думаю, что это может удовлетворить ваши потребности, но семафор не является повседневным расширениемтак что я мог бы быть, что вам нужно установить это через --enable-sysvsem переключатель в php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...