5 votes

Comment définir les arguments de la JVM lors de l'exécution de la commande mvn spring-boot:build-image dans Spring Boot 2.3.0 pour générer une image docker ?

J'essaie de construire une image docker en utilisant la dernière version de Spring Boot (2.3.0). Tout ce que j'ai à faire pour créer une image est de lancer la commande mvn:spring-boot:build-image . Cela créera une image Docker pour moi. Comment puis-je définir les arguments de la JVM (Max, Min heap sizes) dans ce cas ?

4voto

CoderPraBhu Points 166

À partir d'aujourd'hui, vous ne pouvez pas définir les arguments de la JVM dans spring-boot:build-image.

L'image de construction de Spring boot utilise Packeto en interne et accepte les 4 variables d'environnement suivantes, comme indiqué dans la section bellsoft-liberica GitHub.

"BP_JVM_VERSION" : "13.0.1",  
"BPL_JVM_HEAD_ROOM" : "10",
"BPL_JVM_LOADED_CLASS_COUNT" : "35", 
"BPL_JVM_THREAD_COUNT" : "10"

Une autre option consiste à passer des arguments à la JVM lors de l'exécution de l'image.

docker run -p 8080:8080 --env JAVA_OPTS="-Xmx300m -Xms200m" -t youImageName

Si vous utilisez Kubernetes, vous pouvez configurer les options de la JVM à l'adresse suivante niveau de déploiement .

    spec:
      containers:
      - name: yourapp
        image: image path
        ports:
        - containerPort: 8080
        env:
        - name: SPRING_PROFILES_ACTIVE
          value: "prod"    
        - name: BPL_JVM_HEAD_ROOM
          value: "2"  
        - name: BPL_JVM_LOADED_CLASS_COUNT
          value: "35"  
        - name: BPL_JVM_THREAD_COUNT
          value: "10"  
        - name: JAVA_OPTS
          value: >-
                -XX:ReservedCodeCacheSize=40M
                -XX:MaxMetaspaceSize=60M
                -Xlog:gc
                -Xms34m
                -Xmx40m
                -Xss256k
                -XX:MaxRAM=150M

Il y a un problème GitHub ouvert dans le dépôt Spring boot qui discute de cela. Échec de la modification des arguments de la JVM pour l'image buildpacked

2voto

jeremyt Points 19

Variables d'environnement Build Back

J'ai essayé de définir les arguments de la JVM lorsque j'ai commencé à utiliser Spring Boot 2.3 et BuildPacks en novembre 2020, je n'ai rien obtenu et j'ai abandonné / mis cela de côté.

Il y a deux semaines, je l'ai repris et, par hasard, j'ai trouvé ceci : https://github.com/paketo-buildpacks/environment-variables

En fait, vous préfixez votre variable d'environnement par BPE_APPEND_ et cela déclenche le Build Pack des variables d'environnement pour ajouter votre valeur dans la variable d'environnement.

NB : JAVA_TOOL_OPTIONS est ce que vous voulez ici, et non JAVA_OPTS .

J'avais besoin d'attacher un agent Java pour surveiller nos microservices et quelque chose comme ceci build.gradle est ce qui a fonctionné :

bootBuildImage {
  environment = [
    'BPE_DELIM_JAVA_TOOL_OPTIONS' : ' ',
    'BPE_APPEND_JAVA_TOOL_OPTIONS' : '-javaagent:my-java-agent.jar'
    ]
}

J'ai utilisé BPE_DELIM_JAVA_TOOL_OPTIONS pour m'assurer qu'un espace était ajouté à la valeur existante de JAVA_TOOL_OPTIONS avant que ma valeur ne soit modifiée. annexé (le buildpack vous permet également de surcharger ou d'ajouter une valeur à une valeur existante - voir le README).

PS : ma valeur était plutôt '-javaagent:my-java-agent-${some-dynamic-version}.jar' J'avais donc besoin de guillemets doubles, mais cela en faisait une chaîne Gradle, ce qui ne fonctionnait pas, et j'ai donc dû écrire ceci à la place "-javaagent:my-java-agent-${some-dynamic-version}.jar".toString() .

0voto

Jan Mares Points 504

Comme le suggère @jeremyt, vous pouvez remplacer la valeur de cette propriété en utilisant BPE_OVERRIDE_BPL_JVM_THREAD_COUNT variable de construction. Exemple :

bootBuildImage {
    environment('BPE_OVERRIDE_BPL_JVM_THREAD_COUNT', '150')
}

Malheureusement, pour l'instant, BPE_DEFAULT_BPL_JVM_THREAD_COUNT ne fonctionne pas (la valeur est ignorée). L'inconvénient de BPE_OVERRIDE_BPL_JVM_THREAD_COUNT est qu'il ignore la variable d'environnement définie pour l'exécution (en docker run ).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X