Wpis z mikrobloga

#kubernetes #java

Jakie proporcje pamięci dedykujecie na off-heap oraz na kontener? Zauważyłem, że gdy pozostawię więcej, to zarówno off-heap, jak i kontener zużywają więcej zasobów, a gdy zostawiam mniej, to chociaż nie ma awarii, to zużywają mniej pamięci.

Chciałbym rozważyć dwa przypadki:
1. 500m XMS/XMX
2. 1000m XMS/XMX

Jak ustawić kubernetes memory request? Ile z tego przewidujecie na off-heap, a ile na kontener?
  • 17
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Myrcin-: nie da się powiedzieć, musisz zmierzyć.
Wspierałem produkcyjne apki które miały poza heapem te 10%, a miałem takie co zjadały np. 14GB ram z czego ponad 6 poza heap...
  • Odpowiedz
@Myrcin-: nie wiem czy potrafię podać konkretny powód. Ot dość zawiły produkt biznesowy na wielu brandach, nie kojarzę by była jedna prosta przyczyna :O

10% procent zdarzało się i przy takich co jadły 3GB i przy takich co jadły 15. Nie było nigdy prostego wyjaśnienia, raczej zależało od tego jak aplikacja jest napisana i ile funkcjonalności. Ta z >6GB poza heap była dość skomplikowana i na świeżym stacku springbootowym. Wśród
  • Odpowiedz
via Android
  • 0
@annotate Dzięki! Ciężko mi zasymulować dobrze produkcję na środowisku testowym. Najlepiej robić fine tuning na danych produkcyjnych, ale na produkcji nie bardzo mogę się bawić konfiguracją, a jest dużo zmiennych, co utrudnia mi dojście do konkretnych wniosków.
  • Odpowiedz
@Myrcin-: no to iteracyjne, wypuść bardziej bezpieczne ustawienia (request i limits taki sam, spora rezerwa na offheap), zbierz statystyki pamięci z JVM, przeanalizuj, potem jakieś kroki.

Tak od siebie to zaproponowałbym przede wszystkim znaleźć jeden zestaw ustawień który zachowuje się sprawnie w jednym konkretnym ruchu. Np. "potwierdziłem że w testach 1 vcpu i 6GB ramu jest ok dla zalogowanych 30 userów, czyli średnia 150 requestów na sekundę", oczywiście na tyle
  • Odpowiedz
via Android
  • 1
@Sz23_ Domyślne ustawienia czyli brak requestu? To nie są dobre praktyki. Zaczniesz ustawiać request jak Ci k8s zacznie pody ubijać xD
  • Odpowiedz
via Android
  • 0
@Sz23_ Tutaj dość ogólnikowo poruszył ten temat. Generalnie on mówi żeby mieć limit i request, a heap ustawić na około 75%. Tylko że 75% przy 16gb a 500mb to zupełnie inne wartości xD
  • Odpowiedz
  • 0
@Sz23_: Sprawdziłem, jak u mnie to wygląda. Aktualnie na 27 serwisów XMS stanowi między 35 a 65% memory request (im większy pod tym więcej %), ale wciąż mi daleko do tych 75% z filmiku, który przesłałeś.
  • Odpowiedz
@Myrcin-: ale wiesz, że nikt ci nie da gotowego przepisu, bo wszystko zależy od aplikacji?

Jak nie masz synchronized, albo ReentrantLock, to mniej użyjesz off heap. Za to klasy Atomic* nie komunikują się w ogóle z systemem i przez to nie zjadają offheap.
Także wersja java, ilość wątków na GC, czy sam algorytm GC, także ma znaczenie. Wielkość aplikacji, ilość klas, ilość synchronizacji, rodzaj GC, ilość wątków na
  • Odpowiedz
  • 0
Mała aktualizacja dla potomnych. Dla podów o pamięci do 1.5 GB, przy automatycznej instrumentacji otel ustawialem zapotrzebowanie na pamięć z zakresu od 35% do 60% zasobów w porownaniu do kubernetes requestu (przy wiekszym udzialu heapu dostawalem 137 OOMKilled bo pod mial za malo wolnej pamieci) . Wartości te, które podają w internecie (np. Microsoft), tj. 80%, dotyczą jedynie dużych podów o pojemności 4 GB i więcej.
  • Odpowiedz