Il y a une pierre d'achoppement unique à k8s (ou Docker) lors de la vérification des paramètres de Java fonctionnant sur Kubernetes, je vais donc partager la méthode qui a fonctionné.
Normalement, le PID du processus démarré par Docker sera 1, mais jcmd et jinfo décrits plus loin ne peuvent pas être attachés au processus avec le PID 1, il est donc nécessaire de changer le PID.
Pour changer le PID, nous allons introduire un package appelé Tini. Définissez également ENTRYPOINT sur tini et transmettez l'application que vous souhaitez réellement démarrer en tant que paramètre.
Dockerfile
FROM openjdk:8-jdk-alpine
LABEL MAINTAINER="[email protected]"
WORKDIR /opt/docker
ADD --chown=daemon:daemon opt /opt
USER daemon
ENTRYPOINT ["/sbin/tini", "--", "/opt/docker/your/app/entrypoint"]
CMD []
USER root
RUN apk --update add bash
RUN apk add --no-cache tini
USER daemon
EXPOSE 9000
Si vous utilisez une distorsion autre qu'Alpine, veuillez vous référer au GitHub de Tini pour les instructions d'installation. https://github.com/krallin/tini
La connexion au pod est la même que la manière habituelle.
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
pod-name-xxxxxxxxxx-xxxxx 1/1 Running 0 10h
$ kubectl exec -it pod-name-xxxxxxxxxx-xxxxx bash
$ java -XX:+PrintFlagsFinal -version
[Global flags]
intx ActiveProcessorCount = -1 {product}
uintx AdaptiveSizeDecrementScaleFactor = 4 {product}
uintx AdaptiveSizeMajorGCDecayTimeScale = 10 {product}
...
Vérifiez le PID du processus cible avec la commande jps.
$ jps -v
7 ProdServerStart -Duser.dir=/opt/docker
142 Jps -Dapplication.home=/usr/lib/jvm/java-1.8-openjdk -Xms8m
Vous pouvez afficher une liste de paramètres valides en spécifiant le PID vérifié avec la commande jcmd.
$ jcmd 7 VM.flags -all
7:
[Global flags]
intx ActiveProcessorCount = -1 {product}
uintx AdaptiveSizeDecrementScaleFactor = 4 {product}
uintx AdaptiveSizeMajorGCDecayTimeScale = 10 {product}
...
Utilisez la commande jinfo pour voir les paramètres d'un paramètre particulier. Voici un exemple de vérification de la valeur maximale de la mémoire du tas.
$ jinfo -flag MaxHeapSize 7
-XX:MaxHeapSize=1960837120
https://docs.oracle.com/javase/jp/8/docs/technotes/tools/unix/java.html http://etc9.hatenablog.com/entry/2016/05/11/012037 https://x1.inkenkun.com/archives/367 https://qiita.com/kaikusakari/items/9f96ffd3a6dd71dfd914
Recommended Posts