Задать вопрос
denis_druid
@denis_druid

Почему «тяжелый скрипт» выполняется через раз?

Здравствуйте. Помогите решить вот что:
Есть скрипт парсера, собирает и прогоняет через различные фильтра очень много текста, потом всё это дело льет в БД, старые данные из БД чистит и всё в таком духе.
Выполняется примерно 5 минут.
Проблема в том, что каждый второй или третий раз он обрабатывает только половину данных.
Пример:
1-ый запуск: добавлено 310 записей
2-ой запуск: добавлено 108 записей
3-ий запуск: добавлено 311 записей
4-ый запуск: добавлено 327 записей
5-ый запуск: добавлено 113 записей
6-ой запуск: добавлено 324 записей
и тд.
300+ записей это норма, столько и должно быть. Но каждый раз, когда он "не дорабатывает", то записей всегда получается примерно 100 (106, 104, 108 и тд.).
Сначала я грешил на cron, что где-то там затык происходит, сутки его ковырял. Но пару раз сегодня такое наблюдал и при запуске скрипта вручную через браузер. Ощущение, что где-то забивается какой-то кэш, а потом обнуляется спустя некоторое время. Но возможно что-то еще.
Куда копать?
  • Вопрос задан
  • 210 просмотров
Подписаться 1 Оценить 3 комментария
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
denis_druid
@denis_druid Автор вопроса
Итак, проблема решилась следующим образом:
Как я писал выше в комментах, недоработка скрипта происходит только в определенные часы по утрам. Скорее всего удаленный сервер, с которого идет парсинг, в это время загружается служебными задачами, что увеличивает время отклика.
В логах моего сервера никаких ошибок не было. Видимо, не отвечал как надо именно удаленный сервер.
Решение пришло после изменений в этой строке:
curl_setopt($ch, CURLOPT_TIMEOUT, 60); // изначало было 10, потом 30 (30 сек тоже не хватило)

с 60 секундами проблема ушла совсем.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Ahen
@Ahen
Универсальный дилетант
Смотреть логи, график сервера по памяти.
Но обычно все дело в лимите времени работы скрипта (опять-же в логах должна быть соответствующая ошибка, навроде The process *** exceeded the timeout of 60 seconds), лимит устанавливается чтобы зависшие скрипты убивались автоматом. Решается в php.ini, пункт max_execution_time в секундах.
Ответ написан
@Wexter
1) не хватило памяти, смотрите логи
2) не хватило времени, опять же смотрите логи
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽