Używam wielu mikroserwisów (chmura wiosenna + doker) w małych/średnich komputerach na AWS, a ostatnio odkryłem, że te maszyny są często wyczerpane i wymagają ponownego uruchomienia. Badam przyczyny tej utraty mocy, myśląc o możliwych wyciekach pamięci lub błędnych konfiguracjach na instancji/kontenerze.Wykorzystanie pamięci microservices w chmurze Spring
Starałem się ograniczyć ilość pamięci te pojemniki mogą korzystać wykonując:
docker run -m 500M --memory-swap 500M -d my-service:latest
W tym momencie moja usługa (standard wiosna cloud service z jednego punktu końcowego, który pisze rzeczy do Redis DB, używając wiosny -data-redis) nawet się nie zaczęło.
Zwiększona pamięć do 760M
i to działało, ale monitorowanie go dokowanym widzę minimalna wynosi:
CONTAINER CPU % MEM USAGE/LIMIT MEM % NET I/O BLOCK I/O PIDS
cd5f64aa371e 0.18% 606.9 MiB/762.9 MiB 79.55% 102.4 MB/99 MB 1.012 MB/4.153 MB 60
dodałem kilka parametrów, aby ograniczyć pamięci sterty JVM, ale nie wydaje się, aby ją zmniejszyć bardzo dużo:
_JAVA_OPTIONS: "-Xms8m -Xss256k -Xmx512m"
biegnę
- Wiosna Chmura Brixton.M5
- Wiosna Boot 1.3.2
- Java 8 (Oracle JVM)
- Docker
- Wiosna dane Redis 1.7.1
Czy istnieje powód, dlaczego tak prosty serwis używa tak dużo pamięci do uruchomienia ? Czy są jakieś funkcje, które powinienem wyłączyć, aby to poprawić?
+1 Mam podobne zachowanie. Prowadzę serię Microservices obsługujących Spring Cloud, używając Brixton.RC1 i działając w kontenerach docker (działa w trybie roota 1.12). Moje pojemniki zużywają ponad 800 MB pamięci. Zmieniłem swój podstawowy obraz Dockerfile, aby używał 'FROM java: 8-jre-alpine' zamiast nie-alpejskiego obrazu bazowego JDK, którego początkowo używałem ... ale to nie pomogło. Ktoś ma inne pomysły? – Fabian
Uruchomiłem także ten sam kontener na moim pudełku RHEL z dockerem 1.12 i moim osobistym komputerem Mac z Docker dla Mac 1.12 beta 21 na nim działającym. Pojemnik na pudełku RHEL zużywał około 800 MB pamięci, a na moim Macu było tylko 350 MB pamięci. Oba kontenery zostały uruchomione przy użyciu tego samego polecenia dokowania. – Fabian
+1. Ten sam problem z wiosną i dokiem. W moich usługach korzystam z Hibernate, Spring Data REST, Spring Security, jackson itd. Wszystkie z nich zużywają ponad 350mb-500mb i czasami się zawieszają, chociaż nie będą używane. Myślałem, że mikroserwisy powinny być lekkie. Ale przy użyciu pamięci ... – CyberAleks