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

Nginx + PHP-FPM + Yii = почему появляется ошибка 504?

Дано:
Есть вэб сервер с установленными Nginx, php-fpm и MySQL, на нем несколько парсеров XML обрабатывают десятки тысяч файлов и кладут их в базу среднее время обработки 3-5 минут, написанно это все на Yii.
Суть проблемы такова:
Если запустить любой парсер то в течении этих 5 минут пока он работает на любые обращения к остальным страницам ресурса вэб сервер выдает 504 Gateway Time-out
При этом если на том же сервере я запускаю старую версию парсеров написанных на чистом php то 504 ошибки не возникает и мне удается запустить их по несколько штук параллельно и без затруднений открывать другие страници ресурса.

Ошибки в логах только у Nginx:

2014/07/16 14:25:27 [error] 11665#0: *9 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 37.#.#.#, server: #####.ru, request: "GET /index.php?r=loading/parsenotifications HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "#####.ru", referrer: "http://#####.ru/index.php?r=loading/index"

2014/07/16 14:25:29 [error] 11665#0: *12 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 37.#.#.#, server: #####.ru, request: "GET /index.php?r=loading/parsecontracts HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "#####.ru", referrer: "http://#####.ru/index.php?r=loading/index"
  • Вопрос задан
  • 5126 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Есть подозрение, что лочатся файловые сессии. Попробуйте их не использовать, или использовать сессии в базе, если они нужны (только осторожнее с race conditions). Вот тут подробнее. Ну и да, ещё лучше будет парсеры запускать через консоль, а не через веб-сервер.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
вынесите парсер в CLI-демон и просто свяжите все это дело вместе через RabbitMQ например.
Ответ написан
Комментировать
AMar4enko
@AMar4enko
А как парсеры запускаются?
Ответ написан
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Тут много всего может быть.
1) перегруз mysql по нагрузке, по количеству соединений (наиболее вероятно)
2) парсеры если их сразу стартует много и вы их пускаете не из консоли выбирают воркеры nginx
Ответ написан
opium
@opium
Просто люблю качественно работать
Зайдите в логи и просто посмотрите
на крайняк включите слоулог в php-fpm
Ответ написан
merryjane
@merryjane
Системный администратор
У Вас случаем важная табличка в БД не лочится при работе парсеров?
Может парсер ее лочит, а все запросы к сайту ждут когда блокировка спадет?
Вы не мониторили, что с запросами происходит в БД, когда работает парсер?
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы