Ich bin mehrere Microservices (Spring Cloud + Docker) in kleinen/mittleren Maschinen auf AWS laufen und kürzlich habe ich festgestellt, dass diese Maschinen oft erschöpft sind und neu starten müssen. Ich untersuche die Ursachen für diesen Stromausfall und denke dabei an mögliche Speicherlecks oder Fehlkonfigurationen auf der Instanz/dem Container.Spring Cloud Microservices Speicherauslastung
Ich habe versucht, die Menge an Speicher diese Behälter, indem Sie verwenden können, zu begrenzen:
docker run -m 500M --memory-swap 500M -d my-service:latest
An dieser Stelle meinen Dienst (Standard Feder Cloud-Service mit einem einzigen Endpunkt, die Sachen zu einem Redis DB, mit Feder schreibt -Data-Redisis) begann nicht einmal.
erhöhte den Speicher 760M
und es funktionierte, aber die Überwachung mit Docker sehe ich das Minimum ist:
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
ich einige Parameter hinzugefügt, um die JVM Heap-Speicher zu begrenzen, aber es scheint nicht, es zu reduzieren sehr viel:
_JAVA_OPTIONS: "-Xms8m -Xss256k -Xmx512m"
ich bin mit
- Frühling Wolke Brixton.M5
- Frühlings-Boot 1.3.2
- Java 8 (Oracle JVM)
- Docker
- Frühling Daten Redis 1.7.1
Gibt es einen Grund, warum eine solche einfachen Dienst so viel Speicher verwendet zu laufen ? Gibt es irgendwelche Funktionen, die ich deaktivieren sollte, um das zu verbessern?
+1 Ich habe auch ein ähnliches Verhalten. Ich betreibe eine Reihe von Microservices, die Spring Cloud ausführen, Brixton.RC1 verwenden und in Dockercontainern ausgeführt werden (im Docker 1.12 Swarm-Modus). Meine Container verwenden mehr als 800 MB Speicher. Ich habe mein Dockerfile-Basisbild so bearbeitet, dass es 'FROM java: 8-jre-alpine' anstelle des nicht-alpinen JDK-Basisbildes verwendet, das ich ursprünglich verwendet habe ... aber das half nicht viel. Hat jemand andere Ideen? – Fabian
Ich habe auch den gleichen Container auf meiner RHEL-Box mit Docker 1.12 und meinem persönlichen Mac mit Docker für Mac 1.12 Beta 21 ausgeführt. Der Container auf der RHEL-Box verwendete ungefähr 800 MB Speicher und der auf meinem Mac verwendete nur 350 MB Speicher. Beide Container wurden mit dem gleichen docker run-Befehl gestartet. – Fabian
+1. Gleiches Problem mit Feder und Docker. In meinen Diensten benutze ich Hibernate, Spring Data REST, Spring Security, Jackson usw. Und alle von ihnen verbrauchen über 350mb-500mb und manchmal Absturz, obwohl sie nicht verwendet werden. Ich dachte, Microservices sollten leicht sein. Aber mit dieser Speicherbelegung ... – CyberAleks