Sprawdzenie wycieku pamięci w testach

0

Hej, uruchamiam sobie w Intellij testy integracyjne i nagle zaczął lecieć out of heap memory. Projekt jest zarządzany przez gradle. Zaciągnąłem do Intellij plugin Visualvm, ale z tego co czytam ma on jakieś kłopoty z gradle i generalnie mam te ikonki od uruchmienia przez VisualVM szare.

Znacie jakieś inne sposoby, abym sprawdził ewentualny wyciek pamięci w tych testach i gdzie on występuje?

0

a próbowałeś uruchamiać te testy z terminala? co prawda nie wiem jak masz projekt zbudowany (w sensie modułów etc.), ale wydaje mi się, że z terminala powinno się uruchomić. Piję do tego, że może intellij zżera za dużo
albo możesz spróbować podbić ilość pamięci w jvm

1
  1. Gradle to rak
  2. Ale jednak intellij przecież umie sam zbudować projekt i go odpalić, więc nie do końca rozumiem problem
  3. Można VisualVM wpiąć w działajacy proces, więc odpal go standalone, odpal aplikacje i się podepnij
0

Ok widzę, że heap cały czas rośnie:

screenshot-20210114001714.png

I nie wiem czy tych wszystkich obiektów nie jest za dużo xd?:

screenshot-20210114001817.png

1

Tych concurrent hash map node to masz dość sporo :D 1.5 mln elementów w tej macpie. Co ty tam trzymasz? Co to za aplikacja? Można ona potrzebuje po prostu więcej heapu i tyle?

0

@Shalom:
screenshot-20210114003611.png

Też mi chodzi kilka uśpionych wątków od Rabbita :O

0

To może np. robisz coś bardzo dziwnego i nie sprzątasz po testach i np. podnosisz aplikacje kolejny raz co test? Tak jak napisałem trudno wróżyć z fusów niestety. VisualVM pozwala "prześledzić" pewne obiekty żeby dojść do tego skąd się biorą, ale jeśli to się dzieje "poza twoim kodem" to nie wiem.

0

Wygląda na problem w tych testach integracyjnych. Jakieś proste testy performance (JMeter albo Gatling) bym odpalił i sprawdził na GCEasy (ale nie lokalnie), czy dalej masz taki problem.

1

Może tworzysz nowe komponenty za każdym razem kiedy trzeba obsłużyć wiadomość. Popularnym błędem jest np. tworzenie klienta http per request - może tutaj coś podobnego osiągnąłeś :)

2

Panie, ty masz tam 512 mb na heap.... (Edit: a widze, że jednak max to 1g)

https://docs.gradle.org/curre[...]e.api.tasks.testing.Test.html

Ustaw sobie jakiś ludzki rozmiar i do przodu.

test {

  useJUnitPlatform()

  minHeapSize = "1g"
  maxHeapSize = "2g"

Dopiero jak to nie pomoże to zobacz wycieki.

EDIT:4
@Bambo
Pokaż no te OutOfMemory - co tam dokładniej jest napisane w wyjątku, który leci. OOM - OOM nie równy - jest kilka ciekawych przypadków - tu może być taki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0