ACK сервера Dropwizard, затем FIN, ACK, ведущие к 502
В последнее время серверная часть моего приложения возвращала повышенный уровень ошибок 502.
Для контекста, сервер находится за Amazon Elastic Load Balancer и запускает Dropwizard (для справки вот документация по конфигурации Dropwizard).
Я захватил захват пакета для 502-го запроса и увидел следующую схему:
- ELB -> Сервер [PSH, ACK]
- Сервер -> ELB [ACK] (30 мс пауза)
- Сервер -> ELB [FIN, ACK]
- ELB -> Сервер [FIN, ACK]
- Сервер -> ELB [ACK]
Единственное, что я могу вывести из этого потока tcp, это то, что поток-акцептор принял запрос (таким образом, ACK в 2) и не смог ничего с ним сделать (таким образом, FIN, ACK в 3). Мы пытались возиться с acceptorThreads
, idleTimeout
и даже acceptQueueSize
(последнее основано на отличном сообщении в блоге с описанием аналогичной проблемы), но все безрезультатно. Наши метрики активных запросов показывают, что мы даже не близки к насыщению пула, поэтому для обработки этого запроса должен быть доступный поток. Есть идеи, где еще искать?