LINUX.ORG.RU
решено ФорумAdmin

file_get_contents() и какой-то лимит на количество запусков

 


0

1

Сервер на Debian 6.

Представим такую ситуацию, есть висящий сайт, к которому мы делаем запрос file_get_contents(url) или курлом, скрипт подвисает, пока не пройдёт указанный таймаут на его выполнение, ожидая ответа.

Проблема в том, что достаточно двух-трёх таких get_contents, чтобы fastcgi при почти дефолтном конфиге просто перестал отвечать. То есть ни нагрузки, ничего, он просто ждёт, когда это всё выполнится. Какой именно параметр конфига может сделать такой затык так быстро?

Да, я знаю, что для удалённых подключений лучше самому сделать фукцию с сокетом, или просто курл с ограничением времени, который ткнётся, проверит, что всё в порядке, и подгрузит файл, но скорее-всего такую же проблему можно будет получить просто при большем количестве одновременных запусков такого скрипта, ибо при времени ожидании в одну секунду, сценарий должен быть похожий.

Просто вот явных «могу запустить столько копий» чего-то не заметил.

Ограничение бэкенда. Смотри, сколько параллельных PHP-процессов может отрабатывать твой web-сервер.

Ну и в таких случаях скрипты с file_get_contents() нужно сажать на cron или gearman.

KRoN73 ★★★★★ ()

Для file_get_contents можно задавать таймауты.

    $timeout = 5*60;
    $options = array(
          'http'=>array(
          'method'=>"GET",
          'header'=>"Accept-language: en\r\n",
          'timeout' => $timeout
        )
      );
    $context = stream_context_create($options);
    $contents = file_get_contents($source, false, $context); 
Количество потоков можно попробовать отследить как то так:
$runningPHPThreads = `ps -e | grep -c php`;

UFO-man ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.