1. IBM Corporation 2019 All Rights Reserved.
OpenJ9 + OpenJDK
⽇本アイ・ビー・エム株式会社
クラウド・ソフトウェア事業部
⽥中 孝清
2019年8⽉27⽇
2. IBM Corporation 2019. All Rights Reserved.
#jjug
IBM J9 VM
• モバイル環境からIntelサーバー,POWERサーバーから⼤型汎⽤機まで,
様々な環境で使⽤できるJVM
• IBMのソフトウェア製品やサーバー製品に同梱されて提供されていた
• HotSpot VMと全く同じJavaプログラムが同じように動きます
• HotSpot VMの「-X」系オプションの⼀部や
「-XX」系のオプションは使えない
• GCなどは独⾃実装
3. IBM Corporation 2019. All Rights Reserved.
#jjug
Open J9
• 実⾏環境のCore部分をEclipse OMRとして公開
• メモリプールやスレッド管理などの機能を提供
• IBMでは,COBOLやPL/Iの実⾏環境の実装にも利⽤
• OMR上に実装されたJ9 VMをOSSとして公開
• EPLとAPLのデュアルライセンス
• Eclipse Public License 2.0
• Apatch Public License 2.0
https://github.com/eclipse/openj9
4. IBM Corporation 2019. All Rights Reserved.
#jjug
J9 VM / OpenJ9の特徴
• ⾼いパフォーマンス
• 多彩な問題判別機能
• Java Dump︓問題発⽣時に情報をテキスト形式で出⼒
• Dumpエージェント︓ダンプ出⼒を細かく制御
• 「特定のExceptionがでたらスレッドダンプを出⼒」
• 「OutOfMemoryErrorがでたら外部コマンドを実⾏」等
• 先進的な機能を率先して取り⼊れ
• 2006年︓クラス共有(JVM間でロードしたクラス情報を共有)
• 2007年︓参照圧縮(64bit VMで参照を32bitに圧縮)
• 2011年︓balanced GC(G1GC類似の巨⼤ヒープ⽤GC)
• 2013年︓Metronome GC(Realtime Java)を標準搭載
• Coming Soon︓JIT as a Service
5. IBM Corporation 2019. All Rights Reserved.
#jjug
⾼いパフォーマンス性能
• より短い起動時間
• 起動後も安定して低いメモリフットプリントを維持
• より短い時間でピーク性能に到達
5
https://www.eclipse.org/openj9/oj9_performance.html
6. IBM Corporation 2019. All Rights Reserved.
#jjug
Java Dump(Javacore)
3XMTHREADINFO "Default Executor-thread-592" J9VMThread:0x00000000027E9500, j9thread_t:0x00007FBB98034EA8, java/lang/Thread:0x0000000
3XMJAVALTHREAD (java/lang/Thread getId:0x276, isDaemon:true)
3XMTHREADINFO1 (native thread ID:0x2F1, native priority:0x5, native policy:UNKNOWN, vmstate:CW, vm thread flags:0x00000101)
3XMTHREADINFO2 (native stack address range from:0x00007FBC0A140000, to:0x00007FBC0A181000, size:0x41000)
3XMCPUTIME CPU usage total: 0.023360089 secs, current category="Application"
3XMTHREADBLOCK Waiting on: com/ibm/ws/threading/internal/BoundedBuffer$GetQueueLock@0x00000000F5784B60 Owned by: <unowned>
3XMHEAPALLOC Heap bytes allocated since last GC cycle=4096 (0x1000)
3XMTHREADINFO3 Java callstack:
4XESTACKTRACE at java/lang/Object.wait(Native Method)
4XESTACKTRACE at java/lang/Object.wait(Bytecode PC:3(Compiled Code))
4XESTACKTRACE at com/ibm/ws/threading/internal/BoundedBuffer.waitGet_(BoundedBuffer.java:176(Compiled Code))
5XESTACKTRACE (entered lock: com/ibm/ws/threading/internal/BoundedBuffer$GetQueueLock@0x00000000F5784B60, entry count:
4XESTACKTRACE at com/ibm/ws/threading/internal/BoundedBuffer.take(BoundedBuffer.java:624(Compiled Code))
4XESTACKTRACE at java/util/concurrent/ThreadPoolExecutor.getTask(Bytecode PC:151(Compiled Code))
4XESTACKTRACE at java/util/concurrent/ThreadPoolExecutor.runWorker(Bytecode PC:26(Compiled Code))
4XESTACKTRACE at java/util/concurrent/ThreadPoolExecutor$Worker.run(Bytecode PC:5)
4XESTACKTRACE at java/lang/Thread.run(Bytecode PC:13)
3XMTHREADINFO3 Native callstack:
4XENATIVESTACK (0x00007FBC0F9A6992 [libj9prt28.so+0x2f992])
4XENATIVESTACK (0x00007FBC0F9B5DF5 [libj9prt28.so+0x3edf5])
4XENATIVESTACK (0x00007FBC0F9A650C [libj9prt28.so+0x2f50c])
4XENATIVESTACK (0x00007FBC0F9A660E [libj9prt28.so+0x2f60e])
4XENATIVESTACK (0x00007FBC0F9B5DF5 [libj9prt28.so+0x3edf5])
4XENATIVESTACK (0x00007FBC0F9A60EF [libj9prt28.so+0x2f0ef])
4XENATIVESTACK (0x00007FBC0F9A027E [libj9prt28.so+0x2927e])
4XENATIVESTACK (0x00007FBC16013340 [libpthread.so.0+0x10340])
4XENATIVESTACK pthread_cond_wait+0xc2 (0x00007FBC1600F412 [libpthread.so.0+0xc412])
4XENATIVESTACK (0x00007FBC0FDF333D [libj9thr28.so+0x733d])
4XENATIVESTACK (0x00007FBC1427F84A [libj9vm28.so+0xb184a])
4XENATIVESTACK (0x00007FBC1421AC6F [libj9vm28.so+0x4cc6f])
4XENATIVESTACK (0x00007FBBEB5010E1 [<unknown>+0x0])
スレッドダンプや…
7. IBM Corporation 2019. All Rights Reserved.
#jjug
Java Dump(Javacore)
0SECTION ENVINFO subcomponent dump routine
NULL =================================
1CIJAVAVERSION JRE 1.8.0 Linux amd64-64
1CIVMVERSION 20180626_390413
1CIJ9VMVERSION 5cdc604
1CIJITVERSION tr.open_20180619_091956_5cdc604
1CIOMRVERSION a24bc01_CMPRSS
1CIIBMVERSION 21870d6
1CIJITMODES JIT enabled, AOT enabled, FSD disabled, HCR enabled
1CIRUNNINGAS Running as a standalone JVM
1CIVMIDLESTATE VM Idle State: ACTIVE
1CISTARTTIME JVM start time: 2018/07/29 at 01:05:59:389
1CISTARTNANO JVM start nanotime: 44794001166687
1CIPROCESSID Process ID: 311 (0x137)
1CICMDLINE java -Xtrace:trigger=Method{*.*main*,javadump,,1,1} -
version
1CIJAVAHOMEDIR Java Home Dir: /opt/ibm/java/jre
1CIJAVADLLDIR Java DLL Dir: /opt/ibm/java/jre/bin
環境情報や…
• 起動パラメーター
• OSの情報
• 動的ライブラリのロード状況とメモリマップ
• ヒープの使⽤状況・メモリマップ・GCの履歴
• モニター(synchronized排他制御)
• クラスローダーとロードクラス
などなどがテキスト形式で記録
9. IBM Corporation 2019. All Rights Reserved.
#jjug
JIT as a Service
年内にMasterにマージすることを⽬標に開発中
• JITコンパイルをサーバープロセスに委譲
• 各JVMのメモリ・フットプリントの削減
• コンパイル結果の共有
9
10. IBM Corporation 2019. All Rights Reserved.
#jjug
OpenJDK+Open J9
• JVMはOpen J9/Eclipse OMR実装
• クラスライブラリ・ツールはOpenJDKのものを使⽤
• Open JDK部分はクラスパス例外つきGPL V2
• Applet Plug-inやJava Web Start,JavaFXは含まれない
• OSSなので,誰でも無償で利⽤可能
Open JDK
Java Class Library
HotSpot VM Eclipse
OMR
Open JDK
Java Class Library
OpenJ9
OMR
11. IBM Corporation 2019. All Rights Reserved.
#jjug
提供されているプラットフォーム
• Linux x64
• Linux ppc64le / s390x
• AIX ppc64
• Windows x64 (Java 8のみx32も提供)
• macOS x64
• Docker (x64 / ppc64le / s390x)
13. IBM Corporation 2019. All Rights Reserved.
#jjug
OpenJDK+Open J9の⼊⼿⽅法(2)
Docker Hub: https://hub.docker.com/u/adoptopenjdk/
• amd64, ppc64le, s390xの
アーキテクチャーをサポート
• 現在はJava 8/9/10/11/12を提供
• 以下のようなコマンドで取得可能
• $ docker pull adoptopenjdk/openjdk8-openj9
13
14. IBM Corporation 2019. All Rights Reserved.
#jjug
サポートも提供
• IBM Runtime for Business
• AdoptOpenJDKで提供されるOpenJ9に障害サポートを提供
• 年額ライセンス
¥32,900 /virtual processer core
• 実環境ではCPUのCore数
• 仮想化環境では割り当てたCore数
• 障害サポート
• 重要度1対応は24時間・365⽇サポート(⽇本語)
• 製品障害に対する調査・ダンプの解析など
• 新規障害に対する個別Fixの提供
• パッチはAdoptOpenJDK経由で提供
15. IBM Corporation 2019. All Rights Reserved.
#jjug
⼀部のIBMのSW製品で利⽤する場合も
追加料⾦なしでサポートを提供
• WebSphere Application Server Liberty
• IBM Cloud Pak for Applications
15
コンテナ化されたIBMソフトウェア
セキュリティ準拠、運⽤コア・サービスと事前統合された
IBMミドルウェアおよび
オープンソース・コンポーネント含めたパッケージ
コンテナプラットフォーム
Kubernetesベースのポータブルな基盤
運⽤コアサービス (コンテナ向け共通管理基盤)
ロギング、モニタリング、利⽤量計測、セキュリティ
アイデンティティ管理、イメージ・レジストリを統合
IBM Cloud Paks
(IBMの提供するコンテナソリューション)
16. IBM Corporation 2019. All Rights Reserved.
#jjug
まとめ
• IBMは,引き続き独⾃のJVMを提供し続けます
• IBMのJavaはOSSとなりました
• IBMの製品をご利⽤いただいてない個⼈のかた・企業も
商⽤・⾮商⽤をとわず⾃由にご利⽤いただけます
• 有償でサポートを提供しています
• IBMの製品のライセンスでもサポートが提供されます
16