Назад | Перейти на главную страницу

Amazon ELB не очищает соединения KeepAlive

AWS документация упоминает следующее:

Чтобы балансировщик нагрузки отвечал за закрытие подключений к вашему экземпляру, убедитесь, что значение, которое вы установили для времени поддержания активности HTTP, больше, чем значение тайм-аута простоя в балансировщике нагрузки.

Я столкнулся с проблемой, когда мой ELB запускает ~ 40 запросов (js, css, img), в каждом из которых включен KeepAlive, он использует все мои рабочие потоки и блокирует их для KeepAliveTimeout (который я установил выше, чем время ожидания ELB, поскольку предложено).

Однако ELB не закрывает соединения, когда страница загружается - они просто сидят и блокируют рабочих, пока они не истекут.

Итак, я столкнулся с двумя вопросами:

  1. Почему ELB запускает 40 различных соединений, а не просто повторно использует одно и то же?
  2. Почему ELB не очищает соединения, когда это делается с ними?

Включаете ли вы закрепленные сеансы на уровне EC2 или ELB? Включена ли липкость? Какое время отмены регистрации? Разрешен ли слив соединения?

  1. ELB будет запускать новые сеансы, если закрепленные сеансы обычно не включены.
  2. Если вы включите Sticky Sessions на ELB, вы ожидаете подключения на уровне ELB. Рекомендуется включить закрепленные сеансы на уровне EC2. В случае сбоя экземпляров EC2 автоматическое масштабирование будет принудительно запускать новый экземпляр. Это устраняет «Что, если сеанс активен, но мой экземпляр EC2 умер?»

"Amazon ELB в настоящее время отключает постоянные соединения сокетов через 60 секунд, если он не используется. Это условие будет проблемой для случаев использования, которые создают большие файлы (PDF, отчеты) в серверной части EC2, отправляют их в качестве ответа и удерживают соединения в режиме ожидания во время весь процесс генерации ".