Upgrade to Pro — share decks privately, control downloads, hide ads and more …

コンテナ環境でのJava技術の進化

Kenji Kazumura
November 27, 2022

 コンテナ環境でのJava技術の進化

JJUG CCC Fall 2022

Kenji Kazumura

November 27, 2022
Tweet

More Decks by Kenji Kazumura

Other Decks in Technology

Transcript

  1. 自己紹介 © 2022 Fujitsu Limited Jakarta EE 仕様策定委員 MicroProfile ステコミ委員

    JCP Executive Committee メンバー Eclipse Foundation ボードディレクター JJUG CCC、EclipseCon、JakartaOneなどで登壇 2
  2. 影響ある Java API の例 © 2022 Fujitsu Limited java.lang.Runtime#availableProcessors() com.sun.management.OperatingSystemMXBean

    #availableProcessors() com.sun.management.OperatingSystemMXBean #getTotalMemorySize() ForkJoinPool#getCommonPoolParallelism() ・・・ 7
  3. コンテナ対応修正一覧(抜粋)1/2 © 2022 Fujitsu Limited バグID 修正概要 8186248 Allow more

    flexibility in selecting Heap % of available RAM 8196007 Improve out of memory handling in containers 8146115 Improve docker container detection and resource configuration usage 8179498 attach in linux should be relative to /proc/pid/root and namespace aware 8190739 Generating Docker containers by Java Packager 8193710 jcmd -l and jps commands do not list Java processes running in Docker containers 9
  4. コンテナ対応修正一覧(抜粋)2/2 © 2022 Fujitsu Limited バグID 修正概要 8203357 Container Metrics

    8220786 Create new switch to redirect error reporting output to stdout or stder 8250627 Use -XX:+/-UseContainerSupport for enabling/disabling Java container metrics 8203359 Container level resources events 8258854 jhsdb cannot attach to Java processes running in Docker containers 8266490 Extend the OSContainer API to support the pids controller of cgroups 8281274 deal with ActiveProcessorCount in os::Linux::print_container_info 10
  5. HotSpotにおけるコンテナ検出方法 © 2022 Fujitsu Limited https://github.com/openjdk/jdk/blob/fd594302f79b934c9eca713d84313b73f4899aa3/ src/hotspot/os/linux/cgroupSubsystem_linux.cpp#L338-L349 src/hotspot/os/linux/cgroupSubsystem_linux.cpp Cgroup v1

    Cgroup v2 マウント情報からCgroup利用を検出 https://github.com/openjdk/jdk/blob/fd594302f79b934c9eca713d84313b73f4899aa3 /src/hotspot/os/linux/cgroupSubsystem_linux.cpp#L324-L326 11
  6. リネーム問題 © 2022 Fujitsu Limited import java.io.File; public class Rename

    { public static void main(String ... arg) { boolean ok = new File(arg[0]).renameTo(new File(arg[1])); System.out.println(ok); } } 13
  7. コンテナ環境での性能向上期待 © 2022 Fujitsu Limited Java アプリケーション コンテナ Javaアプリケーション 数秒

    数秒 コンテナ 数秒 従来型 Javaアプリケーション 数分 コンテナ型 Javaアプリケーション 16
  8. コンパイラの歴史 © 2022 Fujitsu Limited C/C++ Java Go Python Ruby

    静的 コンパイラ インタプリタ 動的 コンパイラ 静的 コンパイラ 17
  9. Javaネイティブ化技術 © 2022 Fujitsu Limited gcj 2016年9月で終了 Dalvik Android 5.0より、Android

    Runtimeに Avian 2020年くらいに終息 Excelsior JET 2019年5月EOL GraalVM Oracle Labのプロジェクト 19
  10. Project Leyden © 2022 Fujitsu Limited OpenJDKのプロジェクト • https://openjdk.org/projects/leyden/ •

    まだ、JEPにはなっていない ゴールはネイティブイメージの標準化 • ネイティブイメージ生成RIの作成 • ネイティブイメージの互換テスト作成 GrralVMとの違い • GrralVMはOracle Lab のプロジェクト • GrralVMはOpenJDKのプロジェクトではなく、標準ではない 20
  11. Container Restore In Userspace (CRIU) © 2022 Fujitsu Limited Linuxのプロジェクト

    • Java特有の話ではない • WindowsやMacでは使えない チェックポイントで、状態を保存 • チェックポイント時にプロセスをいったん終了 • チェックポイント時のデータはデイスクへ保存 • 保存したデータは何回でもリストア可能 目的は15個くらい(https://criu.org/Usage_scenarios) • 主に、 コンテナのライブマイグレーションと、 起動性能向上が目的 22
  12. CRIU使用方法 © 2022 Fujitsu Limited criu restore –D {dir} リストア時

    criu dump –D {dir} –t {pid} チェックポイント 24
  13. CRIU – Docker サポート © 2022 Fujitsu Limited https://criu.org/Docker experimentalの位置づけ

    カスタムデータが未サポートに 任意の場所へのデータ保存ができない(ドキュメントが古い?) コンテナ内のデータをコピー または チェックポイント時に、`docker commit`する 25
  14. CRIU Docker 使用方法 © 2022 Fujitsu Limited docker start --checkpoint

    {checkpoint} {container} リストア時 docker checkpoint create {container} {checkpoint} チェックポイント 26
  15. OpenJDKのプロジェクト • openjdk.org/project/crac Java起動性能改善が目的 checkpoint/restore時に、Javaプログラムとやりとり可能にする • CRIU + JDK •

    JVMのsafepointを利用 • JDBCの再接続などが可能に jcmdと連携 CRaC (Coordinated Restore At Checkpoint) © 2022 Fujitsu Limited 27
  16. CRaC使用方法 © 2022 Fujitsu Limited java –XX:CRaCCheckpointTo=PATH –jar app.jar java

    –XX:CRaCRestoreFrom=PATH 起動時 リストア時 jcmd app.jar JDK.checkpoint チェックポイント 28