Веб-сервер Java с Jetty - TCP-соединения занимают много времени - PullRequest
3 голосов
/ 04 июня 2010

У меня есть приложение с довольно высоким трафиком (20 КБ / мин), работающее на JVM с контейнером сервлетов Jetty в Ubuntu. Ниже моя конфигурация Jetty:

10 20 2000 2

Когда я анализирую сетевой трафик, я понимаю, что иногда для установления TCP-соединений на порту, на котором работает Jetty, уходит много времени. Длинные соединения варьируются от 3,0 до 9,0. Порт настроен для приема МАКС. Количества TCP-соединений. Знаете ли вы, что может быть причиной задержки приема соединений?

Спасибо

Ответы [ 2 ]

2 голосов
/ 04 июня 2010

Я полагаю, вы используете модель "соединение на запрос". Если это так, попробуйте заглянуть в следующее:

  • установить постоянные соединения, где тот же запросчик повторно использует соединение
  • переключиться на UDP-сообщения
  • использовать балансировщик нагрузки + кластер на два + ящика

Настройка ядра / приложения может помочь, но при 20K / min => 330 TPS я бы сказал, что вам нужно смотреть на другое архитектурное решение, а не только на настройку. Установление TCP-соединения - довольно сложная операция, включающая механизм ядра и, следовательно, переключение контекста.

2 голосов
/ 04 июня 2010

К сожалению, вы не дали больше технических знаний.

Я предполагаю, что вы сталкиваетесь с очень высокой загрузкой системы, так как соединения установлены, отставание (параметр для прослушивания системного вызова [ServerSocket]) достаточно велико.

Принятие соединений всегда подразумевает переключение в режим ядра, это может вызвать высокую нагрузку на систему и может быть решено только путем масштабирования приложения (с использованием балансировки нагрузки), т. Е. Вам нужны большие машины или их больше.

...