У нас есть приложение nodejs, которое успешно развертывается в стандартной среде. Что-то происходит примерно через два часа (или раньше, в зависимости от трафика c): наши последующие клиенты начинают получать пачку из 502 ответов, а затем служба стабилизируется. Мы думаем, что это происходит, по крайней мере, несколько месяцев.
При исследовании причины ошибок 502 я вижу, что:
- Нет журналов необработанных исключений / отклонений обещаний для указывает, что приложение узла разбилось
- I console.log при получении
SIGTERM
, и это тоже не отображается в журналах - Журналы сопроводительного файла nginx включают следующее :
2020/06/16 23:11:11 [error] 35#35: *1149 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 169.254.1.1, server: _, request: "POST /api/redacted HTTP/1.1", upstream: "http://127.0.0.1:8081/api/redacted", host: "redacted.appspot.com""
Я предполагаю, что 502-е поступают из nginx, потому что исходящий поток исчез. Есть ли другие объяснения, которые мне следует изучить?
Если GAE намеренно заменяет мои контейнеры приложений, не должен ли этот процесс предотвращать эти типы 502?
Следует ли мне ожидать, что что-то другое, кроме SIGTERM
, быть отправлено средой, когда приложение / контейнер заменяется?
Обновление № 1 (2020-06-22)
Я исследовал и нашел доказательства того, что мы могли превышать квоту памяти, поэтому я изменил наш instance_class с F1 на F2. Пока я пишу это, наши экземпляры используют ~ 200 МБ памяти (у F2 доступно 512 МБ). Кроме того, я использую переключатель --max-old-space-size
, чтобы установить использование памяти узлов на 496M.
502-е все еще происходят.
Я подозреваю, что 502-е происходят из-за завершающих экземпляров автомасштабирования . Наше приложение никогда не получает SIGTERM
(даже во время развертывания). Это означает, что я не могу корректно закрыть HTTP-соединения keepalive и могу объяснить, почему nginx вызывает сброс соединения одноранговым узлом.
Обновление № 2 (2020-06-24)
Наша служба просто стандартный тип REST, без тяжелых циклов.
Я выложу еще одно обновление с некоторыми графиками памяти, но я не вижу всплесков. Возможно небольшая утечка памяти.
Вот наш app.yaml:
service: redacted
runtime: nodejs12
instance_class: F2
handlers:
- url: /.*
secure: always
redirect_http_response_code: 301
script: auto