IBM Corporation 2019 All Rights Reserved.
OpenJ9 + OpenJDK
⽇本アイ・ビー・エム株式会社
クラウド・ソフトウェア事業部
⽥中 孝清
2019年8⽉27⽇
IBM Corporation 2019. All Rights Reserved.
#jjug
IBM J9 VM
• モバイル環境からIntelサーバー,POWERサーバーから⼤型汎⽤機まで,
様々な環境で使⽤できるJVM
• IBMのソフトウェア製品やサーバー製品に同梱されて提供されていた
• HotSpot VMと全く同じJavaプログラムが同じように動きます
• HotSpot VMの「-X」系オプションの⼀部や
「-XX」系のオプションは使えない
• GCなどは独⾃実装
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
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
IBM Corporation 2019. All Rights Reserved.
#jjug
⾼いパフォーマンス性能
• より短い起動時間
• 起動後も安定して低いメモリフットプリントを維持
• より短い時間でピーク性能に到達
5
https://www.eclipse.org/openj9/oj9_performance.html
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])
スレッドダンプや…
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排他制御)
• クラスローダーとロードクラス
などなどがテキスト形式で記録
IBM Corporation 2019. All Rights Reserved.
#jjug
ダンプ・エージェント(-Xdump)
• -Xdump:java:events=catch,filter=ExceptionClass#CatchingClass.someOpe
• CatchingClassのsomeOpeメソッドで
ExceptionClassがcatchされたときにJava Dumpを⽣成
• -Xdump:java:events=slow,filter=#300ms
• 300ms以上,JVMが制御を取得できなかったときに
Java Dumpを⽣成
• -Xdump:stack:events=allocation,filter=#5m
• 5MB以上のオブジェクトが⽣成されたときに
標準エラー出⼒にスタックトレースを出⼒
• -Xdump:tool:events=systhrow,filter=java/lang/OutOfMemoryError,exec=kill -9 %pid
• OutOfMemoryErrorが発⽣したときに
killコマンドを実⾏して⾃分⾃⾝を強制終了
8
https://www.eclipse.org/openj9/docs/xdump/
IBM Corporation 2019. All Rights Reserved.
#jjug
JIT as a Service
年内にMasterにマージすることを⽬標に開発中
• JITコンパイルをサーバープロセスに委譲
• 各JVMのメモリ・フットプリントの削減
• コンパイル結果の共有
9
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
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)
IBM Corporation 2019. All Rights Reserved.
#jjug
OpenJDK+Open J9の⼊⼿⽅法(1)
AdoptOpenJDK: https://adoptopenjdk.net
以下のバージョンの
OpenJ9+OpenJDK実⾏環境が
ダウンロード可能
• Java 8 (LTS)
• Java 9
• Java 10
• Java 11 (LTS)
• Java 12
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
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経由で提供
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の提供するコンテナソリューション)
IBM Corporation 2019. All Rights Reserved.
#jjug
まとめ
• IBMは,引き続き独⾃のJVMを提供し続けます
• IBMのJavaはOSSとなりました
• IBMの製品をご利⽤いただいてない個⼈のかた・企業も
商⽤・⾮商⽤をとわず⾃由にご利⽤いただけます
• 有償でサポートを提供しています
• IBMの製品のライセンスでもサポートが提供されます
16
IBM Corporation 2019. All Rights Reserved.
#jjug
Open Liberty︓ アプリケーションサーバーもOSSで

JJUGナイトセミナー OpenJDK祭り「OpenJ9+OpenJDK」

  • 1.
    IBM Corporation 2019All 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排他制御) • クラスローダーとロードクラス などなどがテキスト形式で記録
  • 8.
    IBM Corporation 2019.All Rights Reserved. #jjug ダンプ・エージェント(-Xdump) • -Xdump:java:events=catch,filter=ExceptionClass#CatchingClass.someOpe • CatchingClassのsomeOpeメソッドで ExceptionClassがcatchされたときにJava Dumpを⽣成 • -Xdump:java:events=slow,filter=#300ms • 300ms以上,JVMが制御を取得できなかったときに Java Dumpを⽣成 • -Xdump:stack:events=allocation,filter=#5m • 5MB以上のオブジェクトが⽣成されたときに 標準エラー出⼒にスタックトレースを出⼒ • -Xdump:tool:events=systhrow,filter=java/lang/OutOfMemoryError,exec=kill -9 %pid • OutOfMemoryErrorが発⽣したときに killコマンドを実⾏して⾃分⾃⾝を強制終了 8 https://www.eclipse.org/openj9/docs/xdump/
  • 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)
  • 12.
    IBM Corporation 2019.All Rights Reserved. #jjug OpenJDK+Open J9の⼊⼿⽅法(1) AdoptOpenJDK: https://adoptopenjdk.net 以下のバージョンの OpenJ9+OpenJDK実⾏環境が ダウンロード可能 • Java 8 (LTS) • Java 9 • Java 10 • Java 11 (LTS) • Java 12
  • 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
  • 17.
    IBM Corporation 2019.All Rights Reserved. #jjug Open Liberty︓ アプリケーションサーバーもOSSで