2016-05-27 16 views
5

Ho un'applicazione Spring Boot che implementa un servizio che voglio eseguire in un contenitore Docker. Ho seguito la linea guida del funzionario Spring docs che suggeriscono di creare un DockerFile simile a questo:Limitare il consumo di memoria JVM in un contenitore Docker

FROM frolvlad/alpine-oraclejdk8:slim 
VOLUME /tmp 
ADD gs-spring-boot-docker-0.1.0.jar app.jar 
RUN sh -c 'touch /app.jar' 
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] 

Poi una volta che l'immagine è spinto a Docker Io uso Docker Compose di lanciare in questo modo:

spring-boot-docker: 
    ports: 
    - "80:80" 
    expose: 
    - "80" 
    image: my-repo/spring-boot-docker:0.1.0-SNAPSHOT 
    container_name: spring-boot-docker 
    environment: 
     JAVA_OPTS: '-Xmx64m' 

Qui ho la variabile JAVA_OPTS che limita l'allocazione di memoria, tuttavia, quando eseguo docker stats spring-boot-docker, la memoria presa dal contenitore è eccessiva (ho capito che la memoria totale presa dalla JVM potrebbe essere molto più di 64M, ma in questo il caso è totalmente senza limiti).

Ho anche provato con il mem_limit param, ma questo rallenta notevolmente l'applicazione.

risposta

6

Dopo aver sofferto per un po ', sembra che la variabile JAVA_OPTS possa essere passata al contenitore when it's based in a Tomcat image, ma Spring Boot utilizza Java come immagine di base.

ho scoperto this tutorial che ha risolto il problema per me, solo modificando il modo in cui il processo è avviato nel DockerFile e l'aggiunta di una variabile JAVA_OPTS direttamente nella EntryPoint:

ENTRYPOINT exec java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar 

In questo modo, la JVM sceglierà il valore dal comando stesso.

+2

Si noti che il passaggio dalla forma _exec_ a _shell_ di 'ENTRYPOINT' ha anche l'effetto collaterale della disattivazione di {' CMD', argomenti della riga di comando} in modo da eseguire il contenitore come 'finestra mobile run --spring.profiles.active = production' ignorerà semplicemente il profilo. – qerub

Problemi correlati