Mam serwis w netcore generujący raporty. Chcialem przetestować jak sie zachowa przy sporej liczbie strzałow, ale synchronicznie, po kolei. Mam problem z pamięcią
I tak.
Apka odpalona w VS, zajetość ramu powoli rośnie, co kilkanascie sekund wlacza sie GC, ale generalnie rośnie i rośnie. Mam dużo ramu wiec nie chcialo mi sie czekac co sie stanie az cały zeżre.
Apka odplalona w kontenerze Dockera, ustawiony limit pamieci. Po osiągnięciu 100% uzycia ramu, spada do 99% i tak sie wacha w przedziale 99-100. Apka dziala normalnie, dostaje prawidlowe odpowiedzi, nie wiem jednak co sie tam dzieje, jak czesto gc jest wolany, nie udalo mi sie poki co podpiac z debuggerem (dostaje komunikat ze brak praw zapisu do kontenera, jutro jeszcze spróbuje)
Finally, apka odpalona w K8S(GKE). 2 pody, ustawiony limit pamieci 512mb per pod (razem 1gb). Po osiągnięciu 512mb przez pod, pod sie restartuje.
Pytania:
- Czy to jest normalne zachowanie k8s, tzn te restarty podów po osiagnieciu limitu? Mozna to zmienić zeby sie nie restartowaly?
- Jak kontener "widzi" dostępną pamięć? Widzi ze ma dostępne 512 czy jednak te 1gb dla calego deploymentu?
- Czy w momencie restartu poda jakis request może sie "zgubić" tzn dostać jakąś 500'tke bo trafił akurat na moment restartu? Testowalem przy 10k requestów, był kilkakrotnie restart podów, niby zawsze dostawalem status 200, ale może mialem tylko farta? Nie bolały by mnie te restarty gdybym mial pewnosc ze wszystkie requesty dostaną prawidlową odpowiedz.
- Jak by można zdiagnozować ten potencjalny memory leak? Zapuszczalem to narzedzie z VS ktore pokazuje liczbę obiektów (.NET object allocation) i liczba obiektów rośnie, odpala sie gc, spada - generalnie utrzymuje sie caly czas na tym samym poziomie. Skąd wiec ten przyrost pamieci skoro liczba obiektów wlasciwie jest caly czas taka sama?
pliz halp