![Рендеринг на стороне сервера Angular продолжает падать до 502 ошибок](https://rvso.com/image/768949/%D0%A0%D0%B5%D0%BD%D0%B4%D0%B5%D1%80%D0%B8%D0%BD%D0%B3%20%D0%BD%D0%B0%20%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%B5%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0%20Angular%20%D0%BF%D1%80%D0%BE%D0%B4%D0%BE%D0%BB%D0%B6%D0%B0%D0%B5%D1%82%20%D0%BF%D0%B0%D0%B4%D0%B0%D1%82%D1%8C%20%D0%B4%D0%BE%20502%20%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA.png)
Итак, я уже несколько недель запускаю свой фронтенд на сервере (рендеринг на стороне сервера Angular). Я постоянно сталкиваюсь с этой проблемой, когда фронтенд падает до ошибки 502. Мне приходится перезапускать сервер каждые несколько часов, чтобы убедиться, что он снова работает. Трафик не сумасшедший, и все вроде бы в порядке (в моих журналах консоли - никаких ошибок и т. д.), пока он внезапно не падает. Как только я перезапускаю сервер ssr, он снова работает нормально. Я использую универсальную библиотеку, которая является стандартом для рендеринга на стороне сервера в Angular. В чем может быть проблема? Что мне нужно контролировать? ОЗУ? ЦП? Что-то еще?
решение1
HTTP 502 обычно означает, что один сервер (тот, который отправил ответ HTTP 502) попытался связаться с другим сервером, но это не удалось.
Вы упомянули, что перезагрузка «первого» сервера (того, который в конечном итоге выдал ошибку 502) решает проблему, что, вероятно, означает, что на этом сервере есть какая-то непостоянная проблема.
Возможные причины:
- исчерпание памяти: если ваш фронтенд-сервер вынужден создавать новый процесс или поток для взаимодействия с бэкендом, он может не иметь возможности это сделать.
Проверьте использование оперативной памяти (free -m, top) и ограничения оперативной памяти, как глобальные (/etc/security/limits.conf), так и для каждого процесса (cat /proc/PID/limits, где PID — это PID вашего процесса).
- количество открытых соединений: возможно, у вашего фронтенда много открытых соединений с бэкенд-сервером, что означает, что в какой-то момент он не может открыть новое, и перезапуск закрывает эти соединения.
Запустите ss -tlpnao | grep <backend server IP>
(или любой другой порт) и сравните количество соединений со значениями sysctl net.ipv4.ip_local_port_range
и sysctl net.ipv4.tcp_fin_timeout
.
Я бы также запустил , tcpdump -nni any host <backend ip> -v
чтобы проверить, что происходит с точки зрения пакета. Вы получаете ответ? Если да, то какой ответ? Или фронтенд просто никогда не получает ответа от бэкенда? Это может помочь вам найти первопричину.