ジョブスケジューラの Rundeck を Raspberry Pi で動かせるかどうかを実際にインストールして試してみました.また,OpenJDK と Oracle の Java SE でパフォーマンスに顕著な違いが見られたので,簡単にパフォーマンスを評価してみました.
環境
今回の検証に使用した環境を簡単にまとめます.
- Raspberry Pi 3 Model B Rev 1.2
- Raspbian 9.1 (stretch)
- Rundeck 2.10.0
- apt で https://rundeck.bintray.com/rundeck-deb から導入したもの
JVM の設定
Rundeck を実行する際に利用する JVM の設定は /etc/rundeck/profile
に記述されています.デフォルトの設定は
-Xmx1024m -Xms256m -XX:MaxMetaspaceSize=256m -server
となっていますが,Raspberry Pi 3 はメモリが1GBしか搭載されていないので Xmx
を 512MB に減らしました.
-Xmx512m -Xms256m -XX:MaxMetaspaceSize=256m -server
OpenJDK
OpenJDK は以下のように導入しました:
$ sudo apt install openjdk-8-jre-headless
バージョン情報は以下の通りです:
$ /usr/lib/jvm/java-8-openjdk-armhf/jre/bin/java -version
openjdk version "1.8.0_141"
OpenJDK Runtime Environment (build 1.8.0_141-8u141-b15-1~deb9u1-b15)
OpenJDK Zero VM (build 25.141-b15, interpreted mode)
Java SE
Oracle の Java SE は以下のように導入しました:
$ sudo apt install oracle-java8-jdk
バージョン情報は以下の通りです:
$ /usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/bin/java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) Client VM (build 25.65-b01, mixed mode)
OpenJDK と Java SE は sudo update-alternatives --config java
を実行して切り替えられます.
パフォーマンスの測定
OpenJDK と Java SE でどれくらいパフォーマンスに違いがあるのかを簡単に測定してみました.
起動時間
Rundeck の起動にはそれなりの時間がかかるので,起動時間を測定しました.ここでの起動時間とは,sudo systemctl start rundeckd.service
で Rundeck の起動を開始してから,Rundeck がポート 4440 で listen するまでの時間とします.結果は次の通りです:
- OpenJDK: 15分7秒
- Java SE: 1分49秒
トップページのレスポンス時間
Rundeck の起動が完了した後,トップページにアクセスした際のレスポンス時間を測定しました.ここでのレスポンス時間とは time curl -s -o /dev/null -L http://localhost:4440
を実行して得られる real の時間とします.2回目以降のアクセスではレスポンスが早くなる傾向があるため,連続して3回測定を行いました.結果は次の通りです:
- OpenJDK
- 1回目: 42.133秒
- 2回目: 0.827秒
- 3回目: 0.729秒
- Java SE
- 1回目: 4.234秒
- 2回目: 0.207秒
- 3回目: 0.195秒
注意
- 今回の測定はそれぞれの処理系で1度ずつしか行っていません.
- 測定の直前に OS の再起動を行い,キャッシュ等の影響を減らしています.
まとめ
Raspberry Pi においては OpenJDK を利用するより,Oracle の Java SE を利用する方が大幅にパフォーマンスが良いことが分かりました.ARM プラットフォームで Oracle の実装は OpenJDK に比べてかなりパフォーマンスが良いようです.(参考: Oracle Java on Raspberry Pi・Comparing JVMs on ARM/Linux) x86系ではこれほどパフォーマンスに差がない気がしますが (未検証) これは Oracle が ARM 向けの最適化を頑張っているのか,OpenJDK が ARM に関心がないのかどちらなのでしょうか…? とにかく,Raspberry Pi では Oracle が嫌いとかライセンス的な部分が気にならない限り,Oracle の Java SE を使うのが良さそうです.
Raspberry Pi で Rundeck を使えるかというかという点については,Java SE を使って動作させれば,多少のもたつきは感じるものの利用できそうでした.どれくらいの数のジョブを追加できるかは,実際にもう少し運用してみないと分かりません.