Es gibt einen Stolperstein, der nur für k8s (oder Docker) gilt, wenn die auf Kubernetes ausgeführten Java-Parameter überprüft werden. Daher werde ich die Methode teilen, die funktioniert hat.
Normalerweise ist die PID des von Docker gestarteten Prozesses 1, aber da jcmd und jinfo, die später beschrieben werden, nicht mit PID 1 an den Prozess angehängt werden können, muss die PID geändert werden.
Um die PID zu ändern, werden wir ein Paket namens Tini einführen. Setzen Sie ENTRYPOINT außerdem auf tini und übergeben Sie die Anwendung, die Sie tatsächlich starten möchten, als Parameter.
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
Wenn Sie andere Verzerrungen als Alpine verwenden, finden Sie Installationsanweisungen in GitHub von Tini. https://github.com/krallin/tini
Das Anmelden am Pod erfolgt auf die übliche Weise.
$ 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}
...
Überprüfen Sie die PID des Zielprozesses mit dem Befehl jps.
$ jps -v
7 ProdServerStart -Duser.dir=/opt/docker
142 Jps -Dapplication.home=/usr/lib/jvm/java-1.8-openjdk -Xms8m
Sie können eine Liste gültiger Parameter anzeigen, indem Sie die mit dem Befehl jcmd überprüfte PID angeben.
$ jcmd 7 VM.flags -all
7:
[Global flags]
intx ActiveProcessorCount = -1 {product}
uintx AdaptiveSizeDecrementScaleFactor = 4 {product}
uintx AdaptiveSizeMajorGCDecayTimeScale = 10 {product}
...
Verwenden Sie den Befehl jinfo, um die Einstellungen für einen bestimmten Parameter anzuzeigen. Das Folgende ist ein Beispiel für die Überprüfung des Maximalwerts des Heapspeichers.
$ 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