Проблема со скриптом. Виснит Apache.exe

Тема в разделе "PHP", создана пользователем kactetus, 31 окт 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. kactetus

    kactetus митя is here )

    Регистр.:
    26 авг 2007
    Сообщения:
    441
    Симпатии:
    278
    Написал скрипт для парсинга ПС. При малых (3-5) количествах запросов, все работает нормально. Но если больше (20-50), то происходит ошибка в apache.exe (работаю локально на Denwer'e).

    Чем и как можно проверить где ошибка? Скорей всего где то зацикливается скрипт, только вот где.
     
  2. Belial

    Belial

    Регистр.:
    1 фев 2010
    Сообщения:
    236
    Симпатии:
    113
    Ищи логи апача, в частности error.log.
    Если верить гуглу, то в денвере он находится в /usr/local/apache/logs/error.log
     
  3. bonzaza

    bonzaza Постоялец

    Регистр.:
    13 ноя 2007
    Сообщения:
    53
    Симпатии:
    9
    уточнить

    хотел уточнить два вопроса:
    - успользуется ли в скрипте рекурсия ?
    - парсинг осуществляется через вызов file или через libcurl или через сокеты ?

    в идеале интересно было сам код посмотреть =)
     
  4. kactetus

    kactetus митя is here )

    Регистр.:
    26 авг 2007
    Сообщения:
    441
    Симпатии:
    278
    2 Belial - в error.log ошибок никаких нет.

    2 bonzaza:
    1. рекурсия не используется
    2. парсится через curl.

    А есть какой нибудь debug скрипт, чтобы увидеть где ошибка?
     
  5. CrashX

    CrashX В прошлом XSiteCMS

    Регистр.:
    6 июн 2008
    Сообщения:
    682
    Симпатии:
    112
    может просто стоит обновить апач?
    дело на 1-5 минут, закинуть новые либы в папку с апачем в денвере... и все
    потом пробуй еще...
    может проблема в чем то другом, например фаервол, антивирь...
     
  6. bonzaza

    bonzaza Постоялец

    Регистр.:
    13 ноя 2007
    Сообщения:
    53
    Симпатии:
    9
    уточнение

    если надо дебажить сам скрипт, то тут у каждого свои методы
    если надо дебажить curl, то можно воспользоваться CURLOPT_VERBOSE.

    и еще такой вопросик - а задержку ставить не пробовали ? типа

    sleep(rand(1000,60000));flush();

    может с задержкой выпадать не будет =)
     
  7. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    890
    Симпатии:
    562
    ну, если падает апач, знать что отвечает курл- бесполезная затея.
    2kactetus
    как добились мультипоточности? одновременный запуск одного скрипта или мультикурл? Хочу заметить что мультикурл нестабильно работает под виндой- приходилось убирать некоторые операторы и логику в классах, чтобы апач не падал. Но тогда в логах явно писалось где ошибка.
    Чтобы узнать где может быть баг- создай файл task.log и записывай действия кторые сделали. Где будет прерываться- там и ошибка
    PHP:
    $FP_TASK fopen('task.log''w');
    ....
    fwrite($FP_TASK"Получили урл\n");
    ....
    fwrite($FP_TASK"Обработали урл\n");
    ....
     
  8. bonzaza

    bonzaza Постоялец

    Регистр.:
    13 ноя 2007
    Сообщения:
    53
    Симпатии:
    9
    ошибка Apache

    Знать что отвечает КУРЛ в любом случае полезно, может сам модуль курл апач и вешает.

    2kactetus
    Еще немаловажный вопрос такой, а как именно отваливается апач ? Тихо вешает систему или выпадает с ошибкой.

    Кстати, еще можно отдебажить сам Apache (странно что он в логи ничего не пишет), для этого надо найти httpd.conf в папке usr, поправить строчку LogLevel warn на LogLevel debug и перезапустить денвер. После этого еще раз посмотреть ерорлоги, может такой путь поможет =)
     
  9. kactetus

    kactetus митя is here )

    Регистр.:
    26 авг 2007
    Сообщения:
    441
    Симпатии:
    278
    Всем спасибо за предложенные идеи, будем зазбираться.
    XSiteCMS версия Apache 2.2.4, php 5.2.5. Глянул на сайте последняя 2.2.17. Просто бывает, что новая версия не значит что стабильная. Так что посмотрим, а у тебя какая версия?

    KillDead - мультипоточности нет. Может просто не правильно выразился. Я имел ввиду, что
    1[запрос] - проходим ПС (типа Google, yandex ну и т.п.) , потом 2[запрос] - проходим ПС и дальше, т.е. никакой мультипоточности.

    bonzaza Apache виснит типа такого - Ошибка в приложении httpd.exe, закройте приложение. С LogLevel warn - LogLevel debug попробуем.
     
  10. trooll

    trooll PHP кодер

    Регистр.:
    22 дек 2008
    Сообщения:
    503
    Симпатии:
    116
    Сначала на до разобраться скрипт ли это Apache.exe весит или это какойто косяк в системе или денвере. Решение методом исключения.

    Проверка не является ли источником зла ОС:
    Запускаем скрипт на другой машине.

    Проверяем не является ли источником зла Денвер:
    Собираем чистый денвер только с необходимыми модулями.

    А зачем собственно это?
    У меня был случай при работе одного срипта на определенном этапе винда влетала в голубой экран смерти. Думал ОС дуру гонит, а как раз в тот день был на нервах, так с дуру переустановил ОС. Очень удивился когда после установки ситуация повторилась. Начал грешить на дестрибутив ОС. Но вовремя одумался начал отлаживать скрипт.

    Так вот мораль такова, иногда мы начинаем поиск не с того конца. И опасаться следует не только вирусных инфекций :D но и использование функции array_map() :) ИМХО цикл надежнее.
     
Статус темы:
Закрыта.