denis_druid
@denis_druid

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

Здравствуйте. Помогите решить вот что:
Есть скрипт парсера, собирает и прогоняет через различные фильтра очень много текста, потом всё это дело льет в БД, старые данные из БД чистит и всё в таком духе.
Выполняется примерно 5 минут.
Проблема в том, что каждый второй или третий раз он обрабатывает только половину данных.
Пример:
1-ый запуск: добавлено 310 записей
2-ой запуск: добавлено 108 записей
3-ий запуск: добавлено 311 записей
4-ый запуск: добавлено 327 записей
5-ый запуск: добавлено 113 записей
6-ой запуск: добавлено 324 записей
и тд.
300+ записей это норма, столько и должно быть. Но каждый раз, когда он "не дорабатывает", то записей всегда получается примерно 100 (106, 104, 108 и тд.).
Сначала я грешил на cron, что где-то там затык происходит, сутки его ковырял. Но пару раз сегодня такое наблюдал и при запуске скрипта вручную через браузер. Ощущение, что где-то забивается какой-то кэш, а потом обнуляется спустя некоторое время. Но возможно что-то еще.
Куда копать?
  • Вопрос задан
  • 207 просмотров
Решения вопроса 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) не хватило времени, опять же смотрите логи
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
Бюро Цифровых Технологий Санкт-Петербург
от 120 000 до 180 000 ₽
04 мая 2024, в 06:10
4000 руб./за проект
04 мая 2024, в 05:49
10000 руб./за проект
04 мая 2024, в 03:57
10000 руб./за проект