Потенциално изтичане на памет на websocket сесии в кея (9.4.15)

Имам услуга, която приема и създава няколко websocket сесии напред и назад (те се затварят и след това се отварят отново и т.н.). За затваряне на сесиите на websocket извиквам метода close обекта webSocketSession на spring, който е свързан вътре, предполагам, към собствения обект WebSocketSession на jetty.

Моята услуга работи с пролетно зареждане (1.5.20) с вграден сървър на кей (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) и от някои програмисти за планиране (вижте набор от изображения по-долу) enter  описание на изображението тук въведете описание на изображението тук < img src="https://i.stack.imgur.com/TV9J0.png" alt="въведете описание на изображението тук"> въведете описание на изображението тук Моите въпроси:

  1. Някой сблъсквал ли се е с подобно поведение на jetty с проблем с освобождаването на уебсокет ресурси с течение на времето?
  2. Виждам някои нишки на планировчика, които също държат сесиите на websocket. Някой знае ли дали това са вътрешни части на кея? или са предоставени от пролетния зареждащ слой? или нещо друго ?
  3. Възможно ли е Jetty да държи всички сесии вътрешно (дори тези, които са били затворени) и само периодично да ги освобождава? (или някакъв механизъм, който би обяснил как имам тези 8K уж затворени сесии живи и активни?)

person aviad cohen    schedule 24.04.2019    source източник


Отговори (1)


Да, и аз съм имал подобен проблем. След надграждане до jetty 9.4.28 изтичането на памет изчезна.

person user12661762    schedule 20.05.2020
comment
Това не дава отговор на въпроса. Можете да търсите подобни въпроси или да се обърнете към свързаните и свързани въпроси от дясната страна на страницата, за да намерите отговор. Ако имате свързан, но различен въпрос, задайте нов въпрос и включете връзка към този, за да осигурите контекст. Вижте: Задавайте въпроси, получавайте отговори, без разсейване - person Xnero; 20.05.2020