powered by simpleCommunicator - 2.0.16     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Tomcat 8 оптимальные настройки для высокой нагрузки.
14 сообщений из 14, страница 1 из 1
Tomcat 8 оптимальные настройки для высокой нагрузки.
    #40132214
Фотография Mandarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Поделитесь пожалуйста опытом как правильно настроить систему.
Дано:
1. Два сервера приложений c одинаковой конфигурацией - Tomcat 8 (-Xmx26G), Java 8, Centos 7, 5 разных приложений обрабатывающих http запросы.
2. Балансировщик roundrobin dns.

Есть проблема - часто клиенты приложений получают ошибку connection timeout.
Моё предположение что это происходит из-за сборщика мусора java пока собирается мусор томкат не отвечает и попытка соединения завершается с ошибкой connection timeout.

Какие варианты я рассматривал:
1. Увеличить количество серверов приложений, чтобы нагрузка была меньше на каждый конкретный сервер.
2. Выделить каждое приложение в отдельный инстанс томката, что в результате тоже приведёт к снижению нагрузки но уже на уровне томката, а не всего сервера.
3. Сделать "тонкую настройку" сборщика мусора в надежде получить минимальные задержки при сборке мусора. (Как их делать я пока не знаю)

Что вы посоветуете в этой ситуации?
...
Рейтинг: 0 / 0
Tomcat 8 оптимальные настройки для высокой нагрузки.
    #40132218
Самое главное на этом этапе - определить профиль нагрузки, т.е. какие сервера насколько загружены, как часто и насколько долго там GC происходит, сколько памяти съедается. Иначе любое решение будет наугад.

PS: такой огромный хип (26G) правда нужен? Настолько много данных в память загружается?
...
Рейтинг: 0 / 0
Tomcat 8 оптимальные настройки для высокой нагрузки.
    #40132222
Фотография Mandarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev,

При установки объёма памяти исходили из того что много памяти это всегда хорошо.
Все сервера нагружены примерно одинаково, zabbix, в среднем, показывает 50% загрузки. На серверах всего 32 ГБ памяти и 8 процессоров (потоков не сокетов).

Нагрузка распределяется примерно так 80% запросов это мелочь, ответ сервера не превышает 5-7кб остальные ответы могут быть 10 и более мегабайт. Количество запросов примерно 2 тыс./сек. всего на оба сервера, на один получается примерно 1 тыс./сек.
...
Рейтинг: 0 / 0
Tomcat 8 оптимальные настройки для высокой нагрузки.
    #40132234
Mandarin , 1тыщ/сек - это больше чем я когда-либо обрабатывал, поэтому на мои советы можно не особо полагаться. Это вместе со статикой или это все доходит прям до апп сервера и БД?

Парочка комментариев:
MandarinПри установки объёма памяти исходили из того что много памяти это всегда хорошо.Хм.. как-то нелогично. Чем больше хипа, тем длинней будут full GC задержки. Я бы выделял памяти столько сколько надо, не накидывая сверху просто так.
MandarinВсе сервера нагружены примерно одинаково, zabbix, в среднем, показывает 50% загрузки. Среднее - это медиана? Звучит многовато.. Получается во время пиковой загрузки мы уходим под 100%?
И подобные цифры на БД серверах тоже?
Mandarinчасто клиенты приложений получают ошибку connection timeout.Т.к. это connection timeout, то значит клиент не смог даже подключиться. Т.е. в очередь на соединение (Socket acceptCount) он попал, и ждет когда же до него дойдет обработка. И может это не GC, а просто потоки успевают? Если так то я бы уменьшил maxConnections. Чтоб Томкат не принимал соединения если он не справляется. Счас они видимо приняты и просто ждут своей очереди. Если же уменьшить их, то все connection timeout должны уйти и вместо них появятся connection reset/refused. Но они будут сразу случаться, а не ждать еще таймаута. И не будут лишние ресурсы удерживать.

Но опять же - это все наугад. Надо все-таки замерить и точно узнать GC это или нет. И если GC, то первое что приходит в голову - уменьшать хип.
...
Рейтинг: 0 / 0
Tomcat 8 оптимальные настройки для высокой нагрузки.
    #40132239
Фотография Mandarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stanislav Bashkyrtsev,

Уменьшение хипа может привести к появлению ошибки ОutOfMemmory, наверное придётся увеличить количество серверов, сделать там меньше конфигурацию, соответсвенно и хип уменьшится.
...
Рейтинг: 0 / 0
Tomcat 8 оптимальные настройки для высокой нагрузки.
    #40132246
Фотография Mandarin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю что для серверных решений есть "плавная" сборка мусора которая не должна приводить к тому что приложение замирает, ну или это должно происходить очень не продолжительное время.
...
Рейтинг: 0 / 0
Tomcat 8 оптимальные настройки для высокой нагрузки.
    #40132257
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mandarin,
Че ты уперся в сборщик мусора.
Разве ты точно выяснил что это бутылочное горлышко?
...
Рейтинг: 0 / 0
Tomcat 8 оптимальные настройки для высокой нагрузки.
    #40132258
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mandarin,
Нагрузочный тест вообще не делал?
Как писать без тестов то вообще?
...
Рейтинг: 0 / 0
Tomcat 8 оптимальные настройки для высокой нагрузки.
    #40132331
kolchanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя бы собрать базову информацию по нодам:
- график CPU utilization
- график heap
- график использования tomcat http pool

Без этого ничего вообще сказать нельзя.
...
Рейтинг: 0 / 0
Tomcat 8 оптимальные настройки для высокой нагрузки.
    #40132352
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги. Я еще раз верну всех к первому посту.

Mandarin

Есть проблема - часто клиенты приложений получают ошибку connection timeout.


Моё предположение что это происходит из-за сборщика мусора java пока собирается мусор томкат не отвечает и попытка соединения завершается с ошибкой connection timeout.


Несколько мыслей

1) Как верно заметил Петро - н ет оснований пока говорить что виноват GC.

Поэтому предлагаю автору включить логгирование GC.

Для восьмёрки
Код: java
1.
java -XX:+PrintGCDetails -Xloggc:/var/log/myapp/gc.log -jar myapp.jar



В логах мы должны видеть таймауты. Я не знаю какой должен быть таймаут для того чтоб сокет не открылся
вовремя. Это - вопрос открытый ко всем. Но мы должны УВИДЕТЬ проблему в этих логах и сматчить ее с ситуацией
на конкретной ноде. Если клиент получал ошибку connection timeout - то в это время в логах должно сверкнуть
аномально-большое время. Это будет доказательством связи GC с проблемой.

Таймаутом GC можно поуправлять. Можно попробовать активировать G1GC (он должен быть в восмерке)
Поставим 100 мс на цикл сборки.

Код: java
1.
-XX:+UseG1GC -XX:MaxGCPauseMillis=100



Это не гарантированная макс пауза а скорее некое пожелание к GC работать ограниченное время.

2) Что там за алгоритм вообще во время высокой нагрузки ? Может в нем проблема? Надо собрать сведенья профилирования
для той ситуации когда баг воспроизводится.
...
Рейтинг: 0 / 0
Tomcat 8 оптимальные настройки для высокой нагрузки.
    #40132403
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу напомнить уважаемым экспертам, что при обработке HTTP-запросов действуют два разных таймаута.
Сначала клиент ожидает первый байт (заголовков) ответа. И ожидает он не более пятнадцати минут. И этим временем нельзя управлять.

P.S.
26ГБ - порадовало: "В этом году мы посеем двести га свеклы - пусть долгоносик обожрётся до смерти".
...
Рейтинг: 0 / 0
Tomcat 8 оптимальные настройки для высокой нагрузки.
    #40132698
hck2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mandarin
на один получается примерно 1 тыс./сек.

Вкллючай дебаг у логера и к гадалке не ходи увидишь
o.apache.tomcat.util.threads.LimitLatch : Counting up[http-nio-8081-Acceptor] latch=503

Наверняка дефолтные
server.tomcat.max-threads=200
не тянут 1 тыс./сек
...
Рейтинг: 0 / 0
Tomcat 8 оптимальные настройки для высокой нагрузки.
    #40132709
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1000 в секунду ... это тяготеет к react/netty. Даже не верится.
...
Рейтинг: 0 / 0
Tomcat 8 оптимальные настройки для высокой нагрузки.
    #40132821
pavel_nv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MandarinНагрузка распределяется примерно так 80% запросов это мелочь, ответ сервера не превышает 5-7кб остальные ответы могут быть 10 и более мегабайт. Количество запросов примерно 2 тыс./сек. всего на оба сервера, на один получается примерно 1 тыс./сек.


Если так посчитать, то получается что в секунду приходит 200 запросов, ответ на которые более 10 мегабайт. Получается что томкат отдает больше 2 гагабайт пейлоада в секунду. Кажется что слишком много... Да и скорее всего каждый запрос на 10+мб отрабатывает не меньше чем за секунду.

Можно поинтересоваться, что это за тип нагрузки такой?
1) гоняем данные из БД через REST (если БД в одном экземпляре, то кажется что если просто заскейлить приложения - то поплохеет ей)
2) какие либо данные из S3/файловой системы отдаем наружу?

если не ошибаюсь, то скорости железа в принципе такие:
сеть 10 GBps - 1.1 гб/сек
крутой SSD на чтение - 4-7 гб/сек
чтение из оперативной памяти Core i7 + DDR4 - 40~50 гб/сек
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Tomcat 8 оптимальные настройки для высокой нагрузки.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]