背景
nis1をややスペックの心もとないサーバーで動かしていたところ、レスポンスがときどき遅延する。
Javaアプリの Stop the world に関連するものではないかと疑った。
OpenJDK 11 ビルドによる nis1 を 直近の OpenJDK 25 でビルドしたらいい具合に解消するのではないかと考えた。
結果、レスポンス速度が改善した。
ただし、根本的にはCPUやメモリの向上した機器に交換していく必要がある。あくまで一時しのぎ。
方針
nis1ソースには手を入れず、ビルドが通るようビルド設定に最低限の修正を入れた。
参考 https://qiita.com/curupo/items/63083ff2ae9d887850b7
稼働中のnis1プロセスを停止
ps aux | grep java
kill <PID>
現行のJDKをアンインストールし最新のJDKをインストールする
ps aux | grep java
sudo apt remove openjdk*
sudo apt update
sudo apt install openjdk-25-jdk
java -version
javac -version
ビルドに必要なコマンドをインストール
sudo apt install maven git
mvn -version
git -v
テンポラリで作業する(お好みです)
mkdir -p /tmp/build
cd /tmp/build
本家からフォークしたものに修正を入れています。(差分)
JDK25ビルド版をクローンしてチェックアウトしてください。
git clone https://github.com/curupo/nem.git
cd nem/
git branch
git checkout -b feature/openjdk-25 origin/feature/openjdk-25
git branch
ビルドします。通るはず…
mvn clean package -DskipTests
jarファイルができたか確認
ls core/target/*.jar
ls peer/target/*.jar
ls deploy/target/*.jar
ls nis/target/*.jar
名前を揃える
cp nis/target/nem-infrastructure-server-0.6.102.jar nis/target/nem-0.6.102.jar
パッケージするための事前準備
cd /tmp/build/nem/infra
rm -rf package/libs/*
rm -f package/nis/*.jar
パッケージするための準備
cp ../nis/target/libs/*.jar package/libs/
cp ../nis/target/nem-0.6.102.jar package/nis/
cp ../core/target/nem-core-0.6.102.jar package/nis/
cp ../peer/target/nem-peer-0.6.102.jar package/nis/
cp ../deploy/target/nem-deploy-0.6.102.jar package/nis/
必要なファイルがあるか確認
ls package/nis/config.properties
ls package/nis/db.properties
ls package/nis/logalpha.properties
パッケージ化をして完了
tar czf nis-0.6.102-jdk25ver.tgz package
あとはいつもどおり、お好きな場所に展開し
mv nis-0.6.102-jdk25ver.tgz /tmp
cd /tmp
mkdir /tmp/jdk25ver
tar xzf nis-0.6.102-jdk25ver.tgz -C /tmp/jdk25ver
cd /tmp/jdk25ver/package
実行権限付与
chmod +x nix.runNis.sh
メモリ値を適宜修正して nohup と & をつけるやつです。
vim ./nix.runNis.sh
適宜設定を編集
cd /tmp/jdk25ver/package
vi nis/config-user.properties
起動
./nix.runNis.sh
起動確認
ps aux | grep java
curl localhost:7890/chain/height | jq