У нас есть tomcat7, работающий поверх контейнера докеров (официальный образ докера). В часы пик через некоторое время tomcat зависает и больше не может обслуживать запросы (многие запросы зависают и ждут бесконечно).
Вот подробности о приложении-менеджере:
JVM
Свободная память: 627,21 МБ Общий объем памяти: 1751,50 МБ Максимальный объем памяти: 10923,00 МБ
http-apr-8080
Максимальное количество потоков: 500 Текущее количество потоков: 500 Текущий поток занят: 500 Количество поддерживаемых активных сокетов: 0 Максимальное время обработки: 871759 мс Время обработки: 412926,78 с Количество запросов: 3466023 Количество ошибок: 326 Получено байт: 354,74 МБ Отправлено байтов: 1371,40 МБ
Раздел подключений
X500 записи вроде этого:
S 166957 мс 0 КБ 0 КБ ip1 ip2 api.app.url POST / do1 HTTP / 1.1 ...
Есть идеи, почему это происходит?
P.S - Кажется, что общий объем памяти слишком мал (учитывая, что свободная память значительно мала), что могло вызвать это?
Приложение Java может работать не так, как ожидалось в контейнере, таком как Docker, в основном это связано с тем, что сборка мусора не дает достаточной квоты процессора с большим количеством запущенных потоков, это может стать хуже.
Я предлагаю вам взглянуть на журнал сборки мусора и проанализировать полный сборщик мусора, он может указывать на нехватку памяти, а также на загрузку процессора.
Взгляните на это статья это может помочь