The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
apache mod_php повисают скрипты, !*! Frei, 11-Мрт-11, 19:40  [смотреть все]
Здравствуйте.

При запуске скрипта через cron каждую минуту следующим образом: wget "http://site.ru/index.php?param=param1"

Экземпляры apache (httpd), которые обрабатывают этот запрос начинают повисать. Точнее не прекращают свою работу даже если убить процесс wget. Они так и висят в памяти, а скрипты продолжают работать.

Процессы накапливаются, кушают всю оперативку и сервер apache перестаёт отвечать.

На сколько я понял по информации на эту тему проблема в mod_php и том, что скрипты не выдают никакого контента пользователю и не расходуют ресурсы процессора и поэтому не попадают ни под один лимит.


Что делать? Как застраховать сервер от таких скриптов?

  • apache mod_php повисают скрипты, !*! PavelR, 20:02 , 11-Мрт-11 (1)
    > Здравствуйте.
    > При запуске скрипта через cron каждую минуту следующим образом: wget "http://site.ru/index.php?param=param1"
    > Экземпляры apache (httpd), которые обрабатывают этот запрос начинают повисать. Точнее
    > не прекращают свою работу даже если убить процесс wget. Они так
    > и висят в памяти, а скрипты продолжают работать.

    процессы апача и не должны завершаться. Изучите, как работает апач.
    На основании чего высказывается предположение, что скрипты продолжают работать ?
    В курсе ли вы про наличие mod_status ?

    > Процессы накапливаются, кушают всю оперативку и сервер apache перестаёт отвечать.

    печаль...

    > На сколько я понял по информации на эту тему проблема в mod_php
    > и том, что скрипты не выдают никакого контента пользователю и не
    > расходуют ресурсы процессора и поэтому не попадают ни под один лимит.

    так не расходуют ресурсы процессора или продолжают работать ? :-)

    > Что делать? Как застраховать сервер от таких скриптов?

    max_execution_time = 30;  в php.ini

    возможно надо блокировать функцию set_time_limit(0); я не в курсе.


    • apache mod_php повисают скрипты, !*! Frei, 21:22 , 11-Мрт-11 (2)
      > процессы апача и не должны завершаться. Изучите, как работает апач.
      > На основании чего высказывается предположение, что скрипты продолжают работать ?
      > В курсе ли вы про наличие mod_status ?

      Могу конечно ошибаться, но количество процессов апач всё же изменяется, иначе не нужны были бы лимиты на максимальное и минимальное количество процессов.

      Предположение стало фактом после того как без дополнительных запусков скриптов те, что висели в памяти и не завершались стали выдавать результаты в БД. Т.е. скрипт должен уже завершиться, а он всё ещё работает и выдаёт результаты в БД.

      Да, конечно в курсе. Вот как раз по mod_status и видно что процессы повисли на стадии выдачи результатов пользователю (W) и видно что именно те, которые работали со скриптом.

      И там же видно что процессы копятся.

      >> На сколько я понял по информации на эту тему проблема в mod_php
      >> и том, что скрипты не выдают никакого контента пользователю и не
      >> расходуют ресурсы процессора и поэтому не попадают ни под один лимит.
      > так не расходуют ресурсы процессора или продолжают работать ? :-)

      Расходуют оперативу, за счёт чего всё и перестаёт работать. А вот ресурсов процессора им нужно катастрофически мало и поэтому max_execution_time о котором вы пишете ниже не срабатывает. Точнее срабатывает, но на много позднее чем нужно.

      max_execution_time - это не общее время работы скрипта, на сколько я помню, а именно потраченное процессорное время. В любом случае этот лимит стоит и толку нет.


      >> Что делать? Как застраховать сервер от таких скриптов?
      > max_execution_time = 30;  в php.ini
      > возможно надо блокировать функцию set_time_limit(0); я не в курсе.

      Отключил disable_functions="set_time_limit". Проверю и отпишусь. Но, что то мне подсказывает что такой ход не поможет так как эта функция в данном скрипте не используется :)


      • apache mod_php повисают скрипты, !*! PavelR, 21:26 , 11-Мрт-11 (3)
        я так понял, что скрипты - ваши ?

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

        2) Скрипты убрать из запуска как mod_php, запускать либо кроном напрямую, либо даймоном системы. Ибо крива архитектура.

        • apache mod_php повисают скрипты, !*! Frei, 21:30 , 11-Мрт-11 (5)
          > я так понял, что скрипты - ваши ?
          > 1) скрипты обучить блокировкам. Если один процесс выполняет задачу, другой процесс как
          > правило не нужен, или даже вреден.
          > 2) Скрипты убрать из запуска как mod_php, запускать либо кроном напрямую, либо
          > даймоном системы. Ибо крива архитектура.

          Скрипты писал не я. Обучить то обучим.
          Второй и третий и т.д. скрипты нужны, они параллельно работают для увеличения быстродействия

          Тут вопрос в другом - как вообще от этого застраховаться?

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

          И интересно как такая проблема на хостингах решается? Я сейчас куда нибудь эти скрипты закину на хостинг и буду вешать там постоянно апач. ДДОС получается :)

          • apache mod_php повисают скрипты, !*! PavelR, 22:10 , 11-Мрт-11 (6)
            >[оверквотинг удален]
            >> 2) Скрипты убрать из запуска как mod_php, запускать либо кроном напрямую, либо
            >> даймоном системы. Ибо крива архитектура.
            > Скрипты писал не я. Обучить то обучим.
            > Второй и третий и т.д. скрипты нужны, они параллельно работают для увеличения
            > быстродействия
            > Тут вопрос в другом - как вообще от этого застраховаться?
            > А запускать напрямую не удобно, да и в этом случае всё равно
            > их никак не ограничить. При таком варианте скрипты будут работать столько,
            > сколько захочет разработчик - опять же никак не подстраховаться от повисаний
            > и слишком долгой работы.

            Вот так вот вроде можно. http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#fcgidbu...

            <?
            for($i=0;$i<60;$i++) {
                sleep(10);
                print $i;
                print "
            ";
            }
            ?>

            mod_php - выводит полный результат через 10 минут. mod_fcgid - таймаутится, помоему через 40 секунд, но остается процесс в системе... Грустно.

            тут http://forum.nginx.org/read.php?25,30727,31964 говорят что php-fpm умеет ограничивать подобное. =)

            > И интересно как такая проблема на хостингах решается? Я сейчас куда нибудь
            > эти скрипты закину на хостинг и буду вешать там постоянно апач.
            > ДДОС получается :)

            • apache mod_php повисают скрипты, !*! Frei, 20:58 , 14-Мрт-11 (7)
              >[оверквотинг удален]
              > <?
              > for($i=0;$i<60;$i++) {
              >     sleep(10);
              >     print $i;
              >     print "
              > ";
              > }
              > ?>
              > mod_php - выводит полный результат через 10 минут. mod_fcgid - таймаутится, помоему
              > через 40 секунд, но остается процесс в системе... Грустно.

              мод_пхп и через 10 минут ничего не выводит. Процессы всё равно висят.

              Проблему собственно решили пока просто отключением скрипта по собственному желанию. Сделали exit.


              > тут http://forum.nginx.org/read.php?25,30727,31964 говорят что php-fpm умеет ограничивать
              > подобное. =)

              Вроде да, но с этим зверем я ещё не сталкивался. Да и чёт народ пишет что на офф сайте нет информации по прикручиванию к апач. Сам ещё не посмотрел.

              Спасибо за ссылку на досуге попробую прикрутить, чтобы проверить. Потом отпишусь.

      • apache mod_php повисают скрипты, !*! Frei, 21:26 , 11-Мрт-11 (4)
        > Отключил disable_functions="set_time_limit". Проверю и отпишусь. Но, что то мне подсказывает
        > что такой ход не поможет так как эта функция в данном
        > скрипте не используется :)

        Не помогло.





Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру