У меня есть служба, которая принимает и создает несколько сеансов websocket назад и вперед (они закрываются, а затем снова открываются и т. Д.). Для закрытия сеансов websocket я вызываю метод close
объекта webSocketSession пружины, который, как я полагаю, связан с собственным объектом WebSocketSession объекта Jetty.
Мой сервис работает с весенней загрузкой (1.5.20) со встроенным сервером Jetty (9.4.15) и использует G1 GC с параметрами по умолчанию (возможно, будет настроен позже)
В последнее время кажется, что у этого сервиса есть утечка памяти, которую я пытаюсь исследовать.
Я сделал дамп кучи после проверки от POV приложения, что у меня нет открытых сессий с моей стороны, и после того, как я вручную «форсировал» GC (используя JConsole).
Дамп кучи был получен с использованием JConsole с параметром live = true , поэтому я, безусловно, уверен, что у меня есть дамп после того, как GC выполнил на нем всю доступную очистку.
Я проанализировал дамп с помощью Eclipse MAT и обнаружил, что у меня ~ 8K
WebSocketSession объекты, которые остаются живыми. Эта метрика каким-то образом пропорциональна аппликативной метрике, которую я показываю, и до сих пор моя служба работала с ~ 8K соединениями (8K входящих WS-соединений и 8K исходящих WS-соединений, где я использую Jetty в качестве WS-клиента).
Я проанализировал путь к корням GC к одному из этих объектов и обнаружил, что он поддерживается, среди прочего, некоторыми потоками Jetty (потоками qtp-XXX) и некоторыми планировщиками (см. Набор изображений ниже)
Мои вопросы:
- Кто-нибудь сталкивался с таким поведением причала с проблемой высвобождения ресурсов веб-сокетов с течением времени?
- Я вижу некоторые потоки планировщика, которые также содержат сеансы websocket. Кто-нибудь знает, если это внутренние пристани? или они сделаны из весеннего загрузочного слоя? или что-то еще?
- Может ли быть, что Jetty хранит все сеансы внутри себя (даже те, которые были закрыты) и только периодически выпускает их? (или какой-то механизм, который объяснил бы, как у меня эти 8К якобы закрытые сеансы живы и активны?)