LoginSignup
1
0

More than 3 years have passed since last update.

KubernetesのPod内のJavaのパラメーターを確認する

Posted at

Kubernetes上で動いているJavaのパラメーターを確認する際に、k8s(というかDocker)ならではのつまずきがあるので、うまく行った方法を共有します。

Dockerfileの編集

通常Dockerで起動するプロセスのPIDは1になってしまいますが、後述のjcmdやjinfoはPIDが1のプロセスにアタッチ出来ないため、PIDを変更する必要があります。

PIDの変更にはTiniというパッケージを導入します。またENTRYPOINTをtiniにして、実際に起動したいアプリケーションをパラメータとして渡します。

Dockerfile
FROM openjdk:8-jdk-alpine
LABEL MAINTAINER="foo@example.com"
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

Alpine以外のディストーションを利用されている場合は、TiniのGitHubに導入方法をご参照ください。
https://github.com/krallin/tini

Podへのログイン

Podへのログインは通常の方法と同様です。

$ 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}
...

起動中のJavaプログラムのパラメーターの確認

jpsコマンドで対象のプロセスのPID調べます。

$ jps -v
7 ProdServerStart -Duser.dir=/opt/docker
142 Jps -Dapplication.home=/usr/lib/jvm/java-1.8-openjdk -Xms8m

jcmdコマンドで調べたPIDを指定して有効になっているパラメーターの一覧を表示できます。

$ jcmd 7 VM.flags -all
7:
[Global flags]
     intx ActiveProcessorCount                      = -1                                  {product}
    uintx AdaptiveSizeDecrementScaleFactor          = 4                                   {product}
    uintx AdaptiveSizeMajorGCDecayTimeScale         = 10                                  {product}
...

特定のパラメーターの設定値を確認する場合はjinfoコマンドを使用します。
以下はヒープメモリの最大値の設定を確認する例です。

$ jinfo -flag MaxHeapSize 7
-XX:MaxHeapSize=1960837120

Javaのパラメータ関連の参考サイト

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0