Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 2019 Tokyo]

JDK Mission Controlの最近のオープンソース化により、Java Mission ControlとJava Flight Recorderに対する関心がこれまで以上に高まっています。 多くの変更が加えられましたが、これらのツールは、開発中および実稼働中の両方で、Javaの問題のデバッグとトラブルシューティングの最前線に残っています。 このセッションでは、これらの最近の変更、以前のバージョンからの移行、およびJDK Mission Controlコミュニティの将来の計画について説明します。

  • Login to see the comments

  • Be the first to like this

JDK Mission Control: Where We Are, Where We Are Going [Groundbreakers APAC 2019 Tokyo]

  1. 1. The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, timing, and pricing of any features or functionality described for Oracle’s products may change and remains at the sole discretion of Oracle Corporation. Statements in this presentation relating to Oracle’s future plans, expectations, beliefs, intentions and prospects are “forward-looking statements” and are subject to material risks and uncertainties. A detailed discussion of these factors and other risks that affect our business is contained in Oracle’s Securities and Exchange Commission (SEC) filings, including our most recent reports on Form 10-K and Form 10-Q under the heading “Risk Factors.” These filings are available on the SEC’s website or on Oracle’s website at http://www.oracle.com/investor. All information in this presentation is current as of September 2019 and Oracle undertakes no duty to update any statement in light of new information or future events. Safe Harbor Copyright © 2019 Oracle and/or its affiliates.
  2. 2. JDK Mission Control: Where We Are, Where We Are Going Principal Member of Technical Staff Java Platform Group October 24, 2019 David Buck Copyright © 2019 Oracle and/or its affiliates.
  3. 3. JVM Sustaining Engineer OpenJDK 8 Update Project Maintainer JavaOne Rock Star Co-author of Oracle WebLogic Server 11g 構築・運用ガイド @DavidBuckJP https://blogs.oracle.com/buck/ Hello! David Buck (左)
  4. 4. • 背景 • 歴史 • ビルド • デモ(脱線話含み) • まとめ Copyright © 2019 Oracle and/or its affiliates. Agenda
  5. 5. 背景
  6. 6. 複数の技術 • (JRockit / Java / JDK) Mission Control • Flight Recording • Oracle JDK: JDK 7 • OpenJDK: JDK 11 • JEP 167: Event-Based JVM Tracing (JDK 7) • JEP 328: Flight Recorder (JDK 11)
  7. 7. Flight Recorder • JVM イベントのデータを生成、格納する仕組み • 低いオーバーヘッド • 商用環境の利用が想定内 • 常に有効にすることも現実的
  8. 8. Mission Control • Eclipse ベースの GUI ツール • Flight Recording データの表示 • Flight Recording の自動分析 • リアルタイム監視・管理のための JMX コンソール • 拡張機能を追加するための Plug-in フレームワーク • Eclipse IDE に組み込で利用することも可能
  9. 9. Mission Control • Eclipse ベースの GUI ツール • Flight Recording データの表示 • Flight Recording の自動分析 • リアルタイム監視・管理のための JMX コンソール • 拡張機能を追加するための Plug-in フレームワーク • Eclipse IDE に組み込みで利用することも可能
  10. 10. 歴史
  11. 11. スウェーデンでの始め By Holger.Ellgaard - Own work, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=5623391
  12. 12. JRockit • Stockholm にあった Appeal Virtual Systems によって開発された • JITのみ JVM (インタプリタなし) • Intel (x86 / AMD64 / IA64) のパフォー マンスに注目
  13. 13. 「Value Add」(付加価値) • 最初は “Virtual Machine for Java”として販売された • Java のライセンスを取得するには「value add」が必要 • 「Sun より速いぞ!」とはあまり喜んでもらいなかったそうだ • JRockit の管理・監視ツールが「value add」として認められた
  14. 14. Alex Flury at English Wikipedia [Public domain]
  15. 15. By VARA - Beeld- en Geluidwiki, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=49198465
  16. 16. Appeal Virtual Machines
  17. 17. 2002
  18. 18. Appeal Virtual Machines BEA Systems
  19. 19. BEA Systems
  20. 20. 2008
  21. 21. BEA Systems
  22. 22. BEA Systems
  23. 23. 2009
  24. 24. JVM 機能の統合 • HotSpot が JRockit の一番いい機能を導入 • 診断コマンド (JDK 7) • コンパイル管理 (JDK 9) • ネイティブメモリ追跡 (JDK 7) • Flight Recorder (JDK 7) • ビルドの仕組み(内部) (JDK 8) • JRockit Mission Control -> Java Mission Control
  25. 25. JRockit Mission Control 1
  26. 26. JRockit Runtime Analyzer • コンサルティングの経験に基づいた • やり取りの回数を減らすために幅広くデータを収集 • JVM 内部の既存処理にてデータを所得するので追加負荷を抑える • 圧縮された XMLとしてデータを格納する
  27. 27. JRockit Mission Control 2
  28. 28. JRockit Mission Control 3
  29. 29. JRockit Mission Control 4 • Oracle 買収後 (JRockit R28) • JRockit Runtime Analyzer -> Flight Recorder • XML データ -> バイナリデータ • データ収集と格納のオーバーヘッドが減る
  30. 30. Java Mission Control 5
  31. 31. Flight Recorder in HotSpot • 7u40 で Flight Recorder が追加された • JMC 5 が JDK に同梱されるようになった
  32. 32. JDK 7 JMC 5 JDK 8 JMC 5.5 JDK 9 JMC 6 JDK 10 JMC 6
  33. 33. 2018
  34. 34. JDK Mission Control 7 • オープンソース • JDK に同梱されず (JDK 11 以降) • Flight Recorder の実装もオーペンソース化 (JDK 11 以降)
  35. 35. Universal Permissive License • 特許の保護 • 再ライセンスは明確、そしてシンプル • ソースファイルのオーバーヘッドの削減 • 貢献者同意書として利用可能 • 詳細については FAQ を参考にして下さい
  36. 36. Universal Permissive License • 特許の保護 • 再ライセンスは明確、そしてシンプル • ソースファイルのオーバーヘッドの削減 • 貢献者同意書として利用可能 • 詳細については FAQ を参考にして下さい
  37. 37. Oracle Contributor Agreement • Mission Control プロジェクトに貢献する前に OCA を署名し、 オラクルに送ることが必要 • 他の OpenJDK プロジェクトの同様 • 一回だけですべての OpenJDK のプロジェクトへ貢献できる
  38. 38. “...you're doing an awesome job in building a real community and a *very* open source project.“ - Red Hat の貢献者より Marcus Hirt へ jmc-dev alias, November 8, 2018
  39. 39. 互換性 • JDK のバージョンによって Flight Recording の形式が異なる • HotSpot の既存の記録は 将来の JMC で開ける(後方互換) • JDK 11 の記録は JMC 7 以降を利用する必要がある • 現時点で HotSpot のすべての記録を開けるのは JMC 7 のみ
  40. 40. ビルド
  41. 41. 準備する物 • Mercurial (hg) • Maven • JDK 8
  42. 42. OpenJDK JMC repositories jmc 開発用のブランチ jmc-graphics 画像やブランドなどの資料 jmc7 JMC 7.0 のブランチ Copyright © 2019 Oracle and/or its affiliates.
  43. 43. GitHub ミラー • 開発用のブランチのみ • 現時点では同期されていない • 正式に変わるまで(プロジェクト Skara *)HG が推奨 * 検討中
  44. 44. 二シェル物語 シェル1 cd releng/third-party mvn p2:site mvn jetty:run シェル2 cd core mvn install cd .. mvn clean package
  45. 45. 二シェル物語(笑ってください) シェル1 cd releng/third-party mvn p2:site mvn jetty:run シェル2 cd core mvn install cd .. mvn clean package
  46. 46. 二シェル物語(お願いですから。。。 笑ってください!) シェル1 cd releng/third-party mvn p2:site mvn jetty:run シェル2 cd core mvn install cd .. mvn clean package
  47. 47. 二シェル物語 • Equinox p2: OSGi のバンドルとメタデータを管理する仕組み • シェル1が p2 のリポジトリを提供して • シェル2がそのリポジトリを利用してビルドをする
  48. 48. クロスコンパイル • ビルド環境に問わず、すべてのサポート対象の OS 用のバイナリ が生成される • プラットフォームに依存するコードはすべてダウンロードされる
  49. 49. ビルドのポイント • 速やか、そして容易 • 殆どの Linux ディストリビューションでそのまま出来る • 目的のプラットフォームでビルドする必要がない
  50. 50. デモ
  51. 51. Safepoints • Stop-the-World の実装 • 実行スレッドを既知状態で停止する • Java コードを実行するすべてのスレッドを停止する JNI コードを停止する必要はない • プリエンプションが利用されない • ポーリングが利用される By YPLeroux at English Wikipedia, CC BY 3.0, https://commons.wikimedia.org/w/index.php?curid=17734859
  52. 52. Safepoints • Stop-the-World の実装 • 実行スレッドを既知状態で停止する • Java コードを実行するすべてのスレッドを停止する JNI コードを停止する必要はない • プリエンプションが利用されない • ポーリングが利用される By YPLeroux at English Wikipedia, CC BY 3.0, https://commons.wikimedia.org/w/index.php?curid=17734859
  53. 53. Safepoint ポーリング • インタプリタはいつでも止められる • バイトコードの jump table を切り替えることで停止する • ポーリングのオーバーヘッドはない • C1/C2 JIT に明示的なポーリング処理を入れる必要がある • ポーリング用のページをアドレス空間に設置する • このページのアドレスを読むことでポーリングする • ページのアクセス権限を変更することで safepoint を実施する
  54. 54. Copyright © 2019 Oracle and/or its affiliates. dadd goto return バイトコード アドレス dadd goto return iinc iinc jmp_table
  55. 55. Copyright © 2019 Oracle and/or its affiliates. dadd dadd 実装 次のバイトコードを読む 分岐テーブルで次のアドレスの調べる 分岐 (jump)
  56. 56. Copyright © 2019 Oracle and/or its affiliates. dadd dadd 実装 次のバイトコードを読む 分岐テーブルで次のアドレスの調べる 分岐 (jump) goto goto 実装 次のバイトコードを読む 分岐テーブルで次のアドレスの調べる 分岐 (jump)
  57. 57. Copyright © 2019 Oracle and/or its affiliates. iinc inc 実装 次のバイトコードを読む 分岐テーブルで次のアドレスの調べる 分岐 (jump) goto goto 実装 次のバイトコードを読む 分岐テーブルで次のアドレスの調べる 分岐 (jump)
  58. 58. Copyright © 2019 Oracle and/or its affiliates. dadd goto return バイトコード アドレス dadd goto return iinc iinc jmp_table
  59. 59. Copyright © 2019 Oracle and/or its affiliates. dadd goto return バイトコード アドレス dadd goto return iinc iinc jmp_table バイトコード アドレス dadd goto return iinc safepoint
  60. 60. JIT Safepoint ポーリング • メソッドの呼び出しから戻る時 • ループで前の位置に戻る時(ほとんど) • ネイティブコードを呼び出す時(JVM / JNI)
  61. 61. コラッツの問題 (Collatz Conjecture) • ルール • 偶数の場合:2で割る • 奇数の場合:3を掛けて、1を足す • 予想:どの正整数で初めても、結局1まで届く • 数論の未解決問題
  62. 62. コラッツの問題の例 2 1 3 10 5 16 8 4 2 1 4 2 1 5 16 8 4 2 1 6 3 10 5 16 8 4 2 1 7 22 11 34 17 52 26 13 40 20 10 5 16 8...
  63. 63. コラッツの問題の例 2 1 3 10 5 16 8 4 2 1 4 2 1 5 16 8 4 2 1 6 3 10 5 16 8 4 2 1 7 22 11 34 17 52 26 13 40 20 10 5 16 8...
  64. 64. コラッツの問題 By Kunashmilovich - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=48786325
  65. 65. コラッツ問題の検証を やってみましょう。。。
  66. 66. コラッツ問題の検証を 効率悪くて やってみましょう。。。
  67. 67. コラッツ問題の検証 private static long next(long num) { return (num%2 == 0) ? num / 2 : 3 * num + 1; }
  68. 68. コラッツ問題の検証 public static void main(String[] args) { long num; for (int i=2; i < Integer.MAX_VALUE; i++) { num = i; for (int j=0; j < Integer.MAX_VALUE; j++) { num = next(num); if (num == 1) break; } if (num != 1) { System.out.println(i + " did not end at 1."); System.exit(-1); } else if (i % 1000000 == 0) { System.out.println("done with " + i); } } }
  69. 69. Counted Loop • 整数のインデックスを利用するループ • 最低の場合、回数は10億回まで(早い) • この場合、safepoint のポーリング処理を追加しない場合がある
  70. 70. コラッツ問題の検証 public static void main(String[] args) { long num; for (int i=2; i < Integer.MAX_VALUE; i++) { num = i; for (int j=0; j < Integer.MAX_VALUE; j++) { num = next(num); if (num == 1) break; } if (num != 1) { System.out.println(i + " did not end at 1."); System.exit(-1); } else if (i % 1000000 == 0) { System.out.println("done with " + i); } } }
  71. 71. コラッツ問題の検証 public static void main(String[] args) { long num; for (int i=2; i < Integer.MAX_VALUE; i++) { num = i; for (int j=0; j < Integer.MAX_VALUE; j++) { num = next(num); if (num == 1) break; } if (num != 1) { System.out.println(i + " did not end at 1."); System.exit(-1); } else if (i % 1000000 == 0) { System.out.println("done with " + i); } } }
  72. 72. プロファイラーの種類 サンプル ベース 定期的にサンプルを取得する 結果は精算ではない 観察効果は殆どない 呼び出しの回数 ベース コード計測 (BCI) 呼び出し回数ははっきり分かる 観察効果が大きい場合は多い
  73. 73. プロファイラーの種類 サンプル ベース 定期的にサンプルを取得する 結果は精算ではない 観察効果は殆どない 呼び出しの回数 ベース コード計測 (BCI) 呼び出し回数ははっきり分かる 観察効果が大きい場合は多い
  74. 74. 従来のプロファイラー • JVMTI / Bytecode 操作だと、safepoint でしか停止することが出来 ない • Safepoint のポールの間の処理はプロファイラーから隠られている
  75. 75. VisualVM
  76. 76. Flight Recording • いつでも非同期的にスレッドを停止することが出来る • Safepoint に依存しない • HotSpot 内部の API (AsyncGetCallTrace) • Honest Profiler • Oracle Developer Studio
  77. 77. Flight Recorder Mission Control
  78. 78. どうして? • Safepoints は該当するメタデータがある • Byte Code Index (bci) • 生存情報 (スタックからヒープへ指すポイントの情報)
  79. 79. どうして? • デフォルトとして、メタデータは safepoint の分だけが生成される • DebugNonSafepoints を有効にすると、すべてのマシン後用のメタ データが生成される(パフォーマンスの悪影響あり)
  80. 80. Flight Recorder Mission Control
  81. 81. Flight Recorder Mission Control
  82. 82. まとめ • JMC のオーペンソース化は成功した • 使っている JDK のバージョン問わずに、 JMC 7 以降は推奨 • Oracle からの JMC 7 のバイナリのリリースは 近いうちに出る見込みです • 今は自分で簡単にビルドすることが可能 • Flight Recording の AsyncGetCallTrace ベースのプロファイラーは他の ツールより細かくパフォーマンスの情報を取得出来る
  83. 83. ありがとうございました!
  84. 84. 参考資料 Marcus Hirt の Blog http://hirt.se/blog/ The Universal Permissive License (UPL) https://oss.oracle.com/licenses/upl/
  85. 85. Session Survey Help us make the content even better. Please complete the session survey in the Mobile App. Copyright © 2019 Oracle and/or its affiliates.
  86. 86. The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, timing, and pricing of any features or functionality described for Oracle’s products may change and remains at the sole discretion of Oracle Corporation. Statements in this presentation relating to Oracle’s future plans, expectations, beliefs, intentions and prospects are “forward-looking statements” and are subject to material risks and uncertainties. A detailed discussion of these factors and other risks that affect our business is contained in Oracle’s Securities and Exchange Commission (SEC) filings, including our most recent reports on Form 10-K and Form 10-Q under the heading “Risk Factors.” These filings are available on the SEC’s website or on Oracle’s website at http://www.oracle.com/investor. All information in this presentation is current as of September 2019 and Oracle undertakes no duty to update any statement in light of new information or future events. Safe Harbor Copyright © 2019 Oracle and/or its affiliates.

×