CLOVER🍀

That was when it all began.

Infinispan Server 15.0をsystemdで起動できるようにする蚭定できる環境倉数やシステムプロパティを確認する

これは、なにをしたくお曞いたもの

Infinispan Serverにsystemdの蚭定ファむルが含たれおいるこずに今曎ながら気づいたので、せっかくなのでちょっず蚭定しおみようかなず
いうこずで。

぀いでに、蚭定可胜な環境倉数やシステムプロパティなども芋おいっおみようず思いたす。

環境

今回の環境は、こちら。

No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.4 LTS
Release:        22.04
Codename:       jammy


$ uname -srvmpio
Linux 5.15.0-101-generic #111-Ubuntu SMP Tue Mar 5 20:16:58 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux


$ java --version
openjdk 21.0.2 2024-01-16
OpenJDK Runtime Environment (build 21.0.2+13-Ubuntu-122.04.1)
OpenJDK 64-Bit Server VM (build 21.0.2+13-Ubuntu-122.04.1, mixed mode, sharing)
Infinispan Serverをsystemdで起動できるように蚭定する

たずはInfinispan Serverをダりンロヌドしたす。

$ curl -LO https://downloads.jboss.org/infinispan/15.0.0.Final/infinispan-server-15.0.0.Final.zip

展開したす。

$ unzip infinispan-server-15.0.0.Final.zip

展開したディレクトリ内の、docs/systemd/infinispan.serviceずいうファむルがsystemdのナニット定矩ファむルのサンプルになっおいたす。

infinispan-server-15.0.0.Final/docs/systemd/infinispan.service

# This script allows you to run Infinispan Server as a systemd service.
# Modify environment properties in this script as appropriate.
# Copy this script to the following location: /etc/systemd/system
# Activate with 'systemctl daemon-reload'
#               'systemctl start|enable infinispan'

[Unit]
Description=Infinispan Server Service
After=network.target

[Service]
Environment="INFINISPAN_HOME=/opt/infinispan"
#Environment="JAVA_HOME=/usr/java/jdk-11.0.8"
ExecStart=/bin/bash -c ${INFINISPAN_HOME}/bin/server.sh
Type=simple
User=infinispan

[Install]
WantedBy=multi-user.target

゜ヌスコヌドずしおは、こちらにありたす。

https://github.com/infinispan/infinispan/blob/15.0.0.Final/server/runtime/src/main/server/docs/systemd/infinispan.service

どうやらInfinispan 11.0.5.Final、12.0.0.CR1で含たれるようになったようです。

Possibility to separate the subdirectories under server-root

党然気づいおいたせんでした。

では、こちらを䜿っおInfinispan Serverをsystemdで起動できるようにしおいきたしょう。

infinispanずいうナヌザヌを前提ずしおいるようなので、合わせおナヌザヌを䜜成したす。

$ sudo adduser --shell /usr/sbin/nologin --disabled-password --no-create-home --gecos '' infinispan

たた、配眮堎所は/opt/infinispanディレクトリを期埅しおいるようなので、そちらに移動しお所有者の倉曎。

$ sudo mv infinispan-server-15.0.0.Final /opt/infinispan
$ sudo chown -R infinispan:infinispan /opt/infinispan

systemdのナニット定矩ファむルを/etc/systemd/system/ディレクトリにコピヌしたす。

$ sudo cp /opt/infinispan/docs/systemd/infinispan.service /etc/systemd/system/

倉曎を反映しお

$ sudo systemctl daemon-reload

起動。

$ sudo systemctl start infinispan

ステヌタスを芋おみたす。

$ sudo systemctl status infinispan
● infinispan.service - Infinispan Server Service
     Loaded: loaded (/etc/systemd/system/infinispan.service; disabled; vendor preset: enabled)
     Active: active (running) since Sat 2024-03-23 23:37:01 JST; 15s ago
   Main PID: 3113 (server.sh)
      Tasks: 40 (limit: 2220)
     Memory: 191.6M
        CPU: 8.893s
     CGroup: /system.slice/infinispan.service
             ├─3113 /bin/sh /opt/infinispan/bin/server.sh
             └─3196 java -server --add-exports java.naming/com.sun.jndi.ldap=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAM>

 3月 23 23:37:07 ubuntu2204.localdomain bash[3196]: 2024-03-23 23:37:07,408 INFO  [o.i.CONTAINER] ISPN000390: Persisted state, version=15.0.0.Final timestamp=2024-03-23T14:37:07.4068825>
 3月 23 23:37:08 ubuntu2204.localdomain bash[3196]: 2024-03-23 23:37:08,038 INFO  [o.i.CONTAINER] ISPN000104: Using EmbeddedTransactionManager
 3月 23 23:37:08 ubuntu2204.localdomain bash[3196]: 2024-03-23 23:37:08,323 INFO  [o.i.SERVER] ISPN080018: Started connector Memcached (internal)
 3月 23 23:37:08 ubuntu2204.localdomain bash[3196]: 2024-03-23 23:37:08,326 INFO  [o.i.SERVER] ISPN080018: Started connector Resp (internal)
 3月 23 23:37:08 ubuntu2204.localdomain bash[3196]: 2024-03-23 23:37:08,375 INFO  [o.i.SERVER] ISPN080018: Started connector HotRod (internal)
 3月 23 23:37:08 ubuntu2204.localdomain bash[3196]: 2024-03-23 23:37:08,496 INFO  [o.i.SERVER] ISPN080018: Started connector REST (internal)
 3月 23 23:37:08 ubuntu2204.localdomain bash[3196]: 2024-03-23 23:37:08,510 INFO  [o.i.SERVER] ISPN005055: Using transport: Epoll
 3月 23 23:37:08 ubuntu2204.localdomain bash[3196]: 2024-03-23 23:37:08,607 INFO  [o.i.SERVER] ISPN080004: Connector SinglePort (default) listening on 127.0.0.1:11222
 3月 23 23:37:08 ubuntu2204.localdomain bash[3196]: 2024-03-23 23:37:08,608 INFO  [o.i.SERVER] ISPN080034: Server 'ubuntu2204-43585' listening on http://127.0.0.1:11222
 3月 23 23:37:08 ubuntu2204.localdomain bash[3196]: 2024-03-23 23:37:08,654 INFO  [o.i.SERVER] ISPN080001: Infinispan Server 15.0.0.Final started in 5523ms

OKですね。

自動起動の蚭定。

$ sudo systemctl enable infinispan
Created symlink /etc/systemd/system/multi-user.target.wants/infinispan.service → /etc/systemd/system/infinispan.service.

暙準出力に曞き出されたログもjournalctlで芋るこずができたす。

$ sudo journalctl -u infinispan

Infinispan Serverに蚭定できる環境倉数やシステムプロパティを確認する

で、これだけで終わっおも面癜くないので、Infinispan Serverに蚭定できる環境倉数やシステムプロパティを確認しおいきたいず思いたす。

ドキュメントは 芋おいる限りありたせん。

以前、こういう蚭定ファむルがありたすよ、くらいは調べたこずがありたす。

Infinispan Server 14.0の設定まわりのファイルをメモしておく - CLOVER🍀

systemdで起動できるようにしたので、環境倉数やシステムプロパティは把握したいずころですね。

たずはInfinispan Serverのディレクトリ内に移動。

$ cd /opt/infinispan

起動スクリプトたわりでポむントになるのは、次の3぀のファむルです。

蚭定箇所や、すでに環境倉数が蚭定されおいるかどうかの刀定などを抜き出しおみたす。

$ grep -E 'x\$|^#?[^ ]+=' bin/server.sh bin/common.sh bin/server.conf
bin/server.sh:LOADER_CLASS=org.infinispan.server.loader.Loader
bin/server.sh:MAIN_CLASS=org.infinispan.server.Bootstrap
bin/server.sh:ARGUMENTS=
bin/server.sh:PROCESS_NAME=infinispan-server
bin/server.sh:PROGNAME=$(basename "$0")
bin/server.sh:DIRNAME=$(dirname "$0")
bin/server.sh:   if [ "x$ISPN_PIDFILE" != "x" ]; then
bin/server.sh:   if [ "x$ISPN_PIDFILE" != "x" ]; then
bin/common.sh:DEBUG_MODE="${DEBUG:-false}"
bin/common.sh:DEBUG_PORT="${DEBUG_PORT:-8787}"
bin/common.sh:JMX_REMOTING="${JMX:-false}"
bin/common.sh:JMX_PORT="${JMX_PORT:-9999}"
bin/common.sh:GC_LOG="$GC_LOG"
bin/common.sh:JAVA_OPTS_EXTRA=""
bin/common.sh:PROPERTIES=""
bin/common.sh:GREP="grep"
bin/common.sh:MAX_FD="maximum"
bin/common.sh:MALLOC_ARENA_MAX="${MALLOC_ARENA_MAX:-1}"
bin/common.sh:cygwin=false;
bin/common.sh:darwin=false;
bin/common.sh:linux=false;
bin/common.sh:solaris=false;
bin/common.sh:freebsd=false;
bin/common.sh:other=false
bin/common.sh:RESOLVED_ISPN_HOME=$(cd "$DIRNAME/.." >/dev/null; pwd)
bin/common.sh:if [ "x$ISPN_HOME" = "x" ]; then
bin/common.sh:if [ "x$RUN_CONF" = "x" ]; then
bin/common.sh:JAVA_OPTS="$JAVA_OPTS_EXTRA $JAVA_OPTS"
bin/common.sh:    if [ "x$DEBUG_OPT" = "x" ]; then
bin/common.sh:    if [ "x$JMX_OPT" = "x" ]; then
bin/common.sh:if [ "x$JAVA" = "x" ]; then
bin/common.sh:    if [ "x$JAVA_HOME" != "x" ]; then
bin/common.sh:if [ "x$ISPN_ROOT_DIR" = "x" ]; then
bin/common.sh:if [ "x$ISPN_LOG_DIR" = "x" ]; then
bin/common.sh:if [ "x$ISPN_CONFIG_DIR" = "x" ]; then
bin/common.sh:    if [ "x$JVM_D32_OPTION" != "x" ]; then
bin/common.sh:    elif [ "x$JVM_D64_OPTION" != "x" ]; then
bin/common.sh:    elif $darwin && [ "x$SERVER_SET" = "x" ]; then
bin/common.sh:    if [ "x$CLIENT_SET" = "x" -a "x$SERVER_SET" = "x" ]; then
bin/common.sh:        if [ "x$NO_GC_LOG_ROTATE" = "x" ]; then
bin/common.sh:CLASSPATH=
bin/server.conf:#MAX_FD="maximum"
bin/server.conf:#PROFILER=""
bin/server.conf:#JAVA_HOME="/opt/java/jdk"
bin/server.conf:#JAVA=""
bin/server.conf:#PRESERVE_JAVA_OPTS=true
bin/server.conf:if [ "x$JAVA_OPTS" = "x" ]; then
bin/server.conf:#JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"
bin/server.conf:#JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_shmem,server=y,suspend=n,address=infinispan"
bin/server.conf:if [ "x$GC_LOG" = "x" ]; then

このあたりをヒントに、蚭定できる環境倉数ず蚭定しおいなかった堎合のデフォルト倀、デフォルト倀の定矩堎所などを芋おみたす。

環境倉数名 意味 デフォルト倀 デフォルト倀の定矩堎所
JAVA_OPTS JavaVMオプション -Xms64m -Xmx512m -XX:MetaspaceSize=64M -Djava.net.preferIPv4Stack=true -Djava.awt.headless=true bin/server.conf#L49-L50
JAVA_HOME javaコマンドの探玢に利甚 なし bin/server.conf#L30
JAVA javaコマンドのパス java bin/server.conf#L38、bin/common.sh#L167-L169
GC_LOG trueに蚭定するずGCログ
-Xlog:gc*:file=\"$ISPN_LOG_DIR/gc.log\":time,uptimemillis:filecount=5,filesize=3Mを有効にする
true bin/server.conf#L63
JMX trueにするずJMX Remote-Dcom.sun.management.jmxremoteを
有効にする
false bin/common.sh#L14
JMX_PORT JMX=trueずした堎合に
-Dcom.sun.management.jmxremote.port=に蚭定される
9999 bin/common.sh#L15
DEBUG_MODE trueに蚭定するずJavaVMオプションに
-agentlib:jdwp=transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=nを
远加する
false bin/common.sh#L7
DEBUG_PORT DEBUG_MODEがtrueの堎合に
-agentlib:jdwp=...,address=$DEBUG_PORT,...の郚分に䜿甚される
8787 bin/common.sh#L8
PRESERVE_JAVA_OPTS true以倖に蚭定するずJavaVMオプションの調敎を行わなくなる なし bin/server.conf#L43
MALLOC_ARENA_MAX mallocが䜿甚するメモリヌプヌルの数をglibcに䌝える -1 bin/common.sh#L73
RUN_CONF 起動スクリプトが読み蟌む蚭定ファむルを指定する bin/server.conf bin/common.sh#L136
ISPN_LOG_DIR Infinispan Serverのログ出力先ディレクトリ [Infinispan Serverのむンストヌルディレクトリ]/log bin/common.sh#L251
ISPN_CONFIG_DIR Infinispan Serverの蚭定ファむル配眮ディレクトリ [Infinispan Serverのむンストヌルディレクトリ]/conf bin/common.sh#L255

すべおを列挙しおいるわけではないのですが、知っおおいたら良さそうなのはこんなずころでしょうか。

ずはいえ、コマンドラむンオプションで指定できる項目があるこずも忘れおはいけたせん。

$ bin/server.sh --help

Infinispan Server 15.0.0.Final (I'm Still Standing)
Copyright (C) Red Hat Inc. and/or its affiliates and other contributors
License Apache License, v. 2.0. http://www.apache.org/licenses/LICENSE-2.0
Usage:
  -b, --bind-address=<address>  Binds the server endpoint to a specific address.
  -c, --server-config=<config>  Specifies a server configuration file. Defaults to `infinispan.xml`. Can be repeated, in which case the configurations are layered.
  -l, --logging-config=<config> Specifies a logging configuration file. Defaults to `log4j2.xml`.
  -g, --cluster-name=<name>     Sets the name of the cluster. Default set by configuration expression
  -h, --help                    Displays usage information and exits.
  -j, --cluster-stack=<name>    Specifies the JGroups stack for clustering. Default set by configuration expression
  -k, --cluster-address=<name>  Specifies the JGroups bind address for clustering.
  -n, --node-name=<name>        Sets the name of this node. Must be unique across the cluster.
  -o, --port-offset=<offset>    Adds a numeric offset to all ports.
  -p, --bind-port=<port>        Binds the server to a specific port. Defaults to `11222`.
  -s, --server-root=<path>      Specifies the root path for the server. Defaults to `server`.
  -v, --version                 Displays version information and exits.
  -D<name>=<value>              Sets a system property to the specified value.
  -P, --properties=<file>       Sets system properties from the specified file.

コマンドラむンオプションでシステムプロパティを指定するこずもできたす。

たた、ここに蚘茉がありたせんが、コマンドラむンオプションで--debugや--jmxを指定するこずで
DEBUG_MODE=trueやJMX_REMOTING=trueを指定した状態にもできたす。

https://github.com/infinispan/infinispan/blob/15.0.0.Final/server/runtime/src/main/server/bin/common.sh#L23-L36

最埌にシステムプロパティです。

システムプロパティ名 同矩のコマンドラむンオプション 意味 デフォルト倀
-Dinfinispan.bind.address=... -b, --bind-address=<address> Infinispan Serverがバむンドするアドレス 127.0.0.1定矩堎所
-Dinfinispan.bind.port=... -p, --bind-port=<port> Infinispan Serverがバむンドするポヌト 11222定矩堎所
-Dinfinispan.cluster.name=... -g, --cluster-name=<name> クラスタヌ名 cluster定矩堎所
-Dinfinispan.cluster.stack=... -j, --cluster-stack=<name> 䜿甚するJGroupsスタック tcp定矩堎所
-Dinfinispan.node.name=... -n, --node-name=<name> Infinispan Serverのノヌド名 なし定矩堎所
-Dinfinispan.socket.binding.port-offset=... -o, --port-offset=<offset> 同䞀ホストに耇数むンスタンスを起動する時に䜿うポヌトオフセット 0定矩堎所
-Djgroups.bind.address=... JGroupsがバむンドするアドレス SITE_LOCAL定矩堎所は遞択したJGroupsスタックごずに䟝存
-Djgroups.bind.port=... JGroupsがバむンドするポヌト 定矩倀は遞択したJGroupsスタックごずに䟝存
-Djgroups.fd.port-offset=... JGroupsのポヌトオフセット 定矩倀は遞択したJGroupsスタックごずに䟝存

JGroupsの堎合、これ以倖にも蚭定可胜なシステムプロパティがあるので、各スタックの定矩を参照しおください。各スタックの
デフォルトの蚭定ファむルは以䞋にありたす。

https://github.com/infinispan/infinispan/tree/15.0.0.Final/core/src/main/resources/default-configs

システムプロパティを蚭定する堎合は、環境倉数JAVA_OTPSに指定するか、コマンドラむンオプションで指定するこずになるでしょう。

こちらも環境倉数ず同様、すべおを列挙しおいるわけではないのですが知っおおいたら良さそうなのはこんなずころかなず。

その他はこのあたりず

https://github.com/infinispan/infinispan/blob/15.0.0.Final/server/runtime/src/main/java/org/infinispan/server/Server.java#L160-L188

デフォルト倀はこのあたりを芋るずよいでしょう。

https://github.com/infinispan/infinispan/blob/15.0.0.Final/server/runtime/src/main/java/org/infinispan/server/Server.java#L190-L206

蚭定しおみる

では、せっかくなので蚭定しおみたしょう。

こんなファむルを甚意。JavaVMオプションの調敎ずGCログの無効化をしおみたす。

/etc/default/infinispan

JAVA_OPTS=-Xmx1G -XX:MetaspaceSize=64M -Djava.net.preferIPv4Stack=true -Djava.awt.headless=true -Dinfinispan.bind.address=192.168.33.10
GC_LOG=false

䜜成したファむルの内容を環境倉数ずしお読み蟌むように、EnvironmentFileずしお远加。

/etc/systemd/system/infinispan.service

# This script allows you to run Infinispan Server as a systemd service.
# Modify environment properties in this script as appropriate.
# Copy this script to the following location: /etc/systemd/system
# Activate with 'systemctl daemon-reload'
#               'systemctl start|enable infinispan'

[Unit]
Description=Infinispan Server Service
After=network.target

[Service]
Environment="INFINISPAN_HOME=/opt/infinispan"
EnvironmentFile=-/etc/default/infinispan
ExecStart=/bin/bash -c ${INFINISPAN_HOME}/bin/server.sh
Type=simple
User=infinispan

[Install]
WantedBy=multi-user.target

systemdの蚭定を再読み蟌みしお、Infinispan Serverを再起動。

$ sudo systemctl daemon-reload
$ sudo systemctl restart infinispan

倉曎前のJavaVM匕数はこうでした。

$ sudo jcmd 5343 VM.command_line
5343:
VM Arguments:
jvm_args: --add-exports=java.naming/com.sun.jndi.ldap=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED -Xlog:gc*:file=/opt/infinispan/server/log/gc.log:time,uptimemillis:filecount=5,filesize=3M -Xms64m -Xmx512m -XX:MetaspaceSize=64M -Djava.net.preferIPv4Stack=true -Djava.awt.headless=true -Dvisualvm.display.name=infinispan-server -Djava.util.logging.manager=org.infinispan.server.loader.LogManager -Dinfinispan.server.home.path=/opt/infinispan
java_command: org.infinispan.server.loader.Loader org.infinispan.server.Bootstrap
java_class_path (initial): :/opt/infinispan/boot/infinispan-server-runtime-15.0.0.Final-loader.jar
Launcher Type: SUN_STANDARD

再起動埌は、こうなりたした。

$ sudo jcmd 5506 VM.command_line
5506:
VM Arguments:
jvm_args: --add-exports=java.naming/com.sun.jndi.ldap=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED -Xmx1G -XX:MetaspaceSize=64M -Djava.net.preferIPv4Stack=true -Djava.awt.headless=true -Dinfinispan.bind.address=192.168.33.10 -Dvisualvm.display.name=infinispan-server -Djava.util.logging.manager=org.infinispan.server.loader.LogManager -Dinfinispan.server.home.path=/opt/infinispan
java_command: org.infinispan.server.loader.Loader org.infinispan.server.Bootstrap
java_class_path (initial): :/opt/infinispan/boot/infinispan-server-runtime-15.0.0.Final-loader.jar
Launcher Type: SUN_STANDARD

倉曎が反映されたした。

こんなずころでしょうか。

おわりに

Infinispan Serverをsystemdで起動できるようにしたのず、蚭定できる環境倉数やシステムプロパティをいろいろ芋おいっおみたした。

環境倉数やシステムプロパティはある皋床は知っおいたのですが、デバッグ甚のものなどはそれほど気にしおいなかったので参考に
なりたしたね。
デバッグしたくなったら䜿っおみたしょう 。