Как я могу ограничить время выполнения сценария Perl в IIS? - PullRequest
3 голосов
/ 16 сентября 2008

Это среда общего хостинга. Я контролирую сервер, но не обязательно содержание. У меня есть клиент с Perl-скриптом, который, кажется, время от времени выходит из-под контроля и высасывает 50% процессора, пока процесс не будет остановлен.

С помощью сценариев ASP я могу ограничить время выполнения сценария, и IIS просто отключит его, скажем, через 90 секунд. Это не работает для сценариев Perl, так как он работает как процесс cgi (и фактически запускает внешний процесс для выполнения сценария).

Точно так же методы, которые ищут избыточное потребление ресурсов в рабочем процессе, скорее всего, этого не увидят, поскольку потребляемый ресурс (процессор) пережевывается дочерним процессом, а не самим WP.

Есть ли способ заставить IIS прервать сценарий Perl (или другой процесс типа cgi), который выполняется слишком долго? Как ??

Ответы [ 4 ]

1 голос
/ 01 октября 2008

Обновление об этом ...

Оказывается, что этот конкретный скрипт, по-видимому, немного глючит, и что робот Google обладает невероятной способностью "нажимать на кнопки" и сводить его с ума. Скрипт - это старое коммерческое приложение, которое делает календарь. По-видимому, он отображает ссылки для «следующего месяца» и «предыдущего месяца», и если вы будете следовать «следующему месяцу» слишком много раз, вы упадете с обрыва. Полученная страница, однако, все еще содержит ссылку «в следующем месяце». Робот Google будет постоянно бить скрипт до смерти и жевать процессор.

Любопытно, что добавление robots.txt с Disallow: / не решило проблему. Либо робот Google уже завладел сценарием и не отпускает его, либо он просто игнорировал файл robots.txt.

Так или иначе, Microsoft Process Explorer (http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx) очень помог мне, поскольку он позволил мне увидеть среду процесса perl.exe более подробно, и я смог определить, что это был Робот Google вызывает у меня проблемы.

Как только я это понял (и определил, что robots.txt не решит проблему), я смог использовать IIS напрямую, чтобы заблокировать весь трафик на этот сайт с * .googlebot.com, который хорошо работал в этом случае, поскольку нам все равно, индексирует ли Google этот контент.

Большое спасибо за другие идеи, которые все опубликовали!

Эрик Лонгман

1 голос
/ 17 сентября 2008

Тайм-аут ASP-сценария применяется ко всем языкам сценариев. Если скрипт выполняется на странице ASP, тайм-аут скрипта закроет страницу, которая нарушает работу.

1 голос
/ 16 сентября 2008

В системе в стиле UNIX я бы использовал обработчик сигнала, перехватывающий события ALRM, а затем использовал функцию будильника, чтобы запустить таймер перед запуском действия, которое, как я ожидал, могло бы прерваться. Если действие выполнено, я бы использовал alarm (0), чтобы выключить будильник и выйти нормально, в противном случае обработчик сигнала должен его поднять, чтобы закрыть все изящно.

Я давно не работал с perl на Windows, и хотя Windows немного POSIXy, я не могу гарантировать, что это будет работать; вам нужно проверить документацию по Perl, чтобы узнать, поддерживаются ли сигналы на вашей платформе или в какой степени.

Более подробную информацию об обработке сигналов и такого рода программировании самоуничтожения с использованием alarm () можно найти в Perl Cookbook. Вот краткий пример, взятый из другого поста и немного измененный:

eval {
    # Create signal handler and make it local so it falls out of scope
    # outside the eval block
    local $SIG{ALRM} = sub {
        print "Print this if we time out, then die.\n";
        die "alarm\n";
    };

    # Set the alarm, take your chance running the routine, and turn off
    # the alarm if it completes.
    alarm(90);
    routine_that_might_take_a_while();
    alarm(0);
};
0 голосов
/ 17 сентября 2008

Поиск в Google по «iis cpu limit» дает следующие хиты:

http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/38fb0130-b14b-48d5-a0a2-05ca131cf4f2.mspx?mfr=true

"Функция мониторинга ЦП отслеживает и автоматически отключает рабочие процессы, которые занимают много времени ЦП. Мониторинг ЦП включен для отдельных пулов приложений."

http://technet.microsoft.com/en-us/library/cc728189.aspx

"Используя мониторинг ЦП, вы можете отслеживать рабочие процессы на предмет использования ЦП и, при необходимости, выключать рабочие процессы, которые занимают много времени ЦП. Мониторинг ЦП доступен только в режиме изоляции рабочих процессов."

...