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 ?
Réponses
Trop de publicités?À 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
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()
.
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
).