Chart原文はこちら。Adoptiumです。JVMテクノロジーであり、これを使うとJVMがJITコンパイルの作業を別プロセス(JITServer)に委譲できます。このJITServerはリモートマシンで動作する可能性があります。コンパイラのバグによる偽装クラッシュに対する耐性の向上など、数多くの利点をもたらします。リソースのプロビジョニング作業が非常にシンプルになります。それは、ユーザーがコンパイル時に発生するCPUやメモリの予期せぬ急増を考慮する必要がなく、Javaアプリケーションのニーズにのみ集中できるためです。Zで稼働する64ビットLinuxもサポートするようになりました。Environmentsクラウドコンピューティングは、さまざまな業界でコンピュータサービスの利用方法を大きく変えています。調査によると、90%の企業がパブリッククラウド、プライベートクラウド、ハイブリッドクラウドのいずれかの環境にサービスを移行している、または移行したという結果が出ています。専門家は、商用ワークロードの60%がクラウド環境で実行されていると予測しています。complexityhttps://451research.com/images/Marketing/press_releases/Pre_Re-Invent_2018_press_release_final_11_22.pdfJITServerテクノロジーは、クラウド環境に適しています。JITServerの利点は、アプリケーションとJITコンパイラーがCPUとメモリの奪い合いを強いられるような、(クラウドによく見られる)リソースに制約のある環境でより明らかになります。JITServerは、クライアントJVMのピーク時のメモリ使用量を効果的に削減し、より小さなコンテナの使用を可能にすることで、アプリケーションの密度を高め、結果として運用コストを削減します。JITServerは、コンテナ化してクラウドネイティブ環境(Kubernetes、OpenShiftなど)に簡単にデプロイできるため、高密度なクラウド環境でJavaアプリケーションを実行することがさらに容易になります。ChartJITServerをクラウド環境で試してみたいとお考えの方には朗報です。chartが簡単かつわかりやすい方法を提供します。これを使うと、3つの簡単なステップでJITServerテクノロジーをデプロイし、有効にできます。chartを導入するための要件とその方法について説明します。4.1以後(訳注:明らかに誤記なので原文から変更しています。chartが利用になっていることを確認します。chartをインストールします。chartのデプロイをテストします。JITServerのサービスエンドポイント(サービス名、ポート)を探します。jitserver-release-openj9-jitserver-chart:38400Javaアプリケーションコンテナーの環境変数JAVA_OPTIONSを以下の値にアップデートします(アプリケーションデプロイメント次第でアップデート方法は異なります)。chartによるデフォルトの設定は、クライアントJVMのサービスを提供できるJITServerインスタンスをデプロイするのであれば十分ですが、JITServerとクライアントJVMをさらに設定したい場合もあるでしょう。ここでは、JVMの環境変数(JAVA_OPTIONSなど)を使って渡すことができる、利用可能なJITServerのオプションをすべて列挙します。JITServerのアドレスとポート番号を構成する-XX:JITServerAddress=<文字列>JITServerのサービス名もしくはIPアドレスを指定する(デフォルト値はlocalhost)。このオプションはクライアントJVMでのみ有効。-XX:JITServerPort=<整数値>JITServerがリスニングし、クライアントJVMが接続するポート番号を指定する(デフォルト値は38400)。JITコンパイルリクエストのタイムアウト値を構成する-XX:JITServerTimeout=<整数値>ソケット操作のタイムアウト値(ミリ秒)を指定する(デフォルト値は、JITServerでは30000ミリ秒、クライアントJVMでは2000ミリ秒)。クライアントJVM側のタイムアウト値は、ネットワークの遅延が大きい場合、適宜増加させる必要がある。JITServerとクライアントJVM間のネットワーク通信をOpenSSLで暗号化するよう構成するバージョン1.0.xまたは1.1.xを使用して、OpenSSLの鍵と証明書を生成する。-XX:JITServerSSLCert=cert.pemJITServerで秘密鍵と証明書ファイルを指定する。-XX:JITServerSSLRootCerts=cert.pemクライアントJVMで証明書ファイルを指定する。chartの環境変数JAVA_OPTIONSを更新してください。オプションを追加することで可能です。JITServerがポート9000をリッスンし、タイムアウト値として40000msを使用するように設定するには、以下のようなオプションを使用します。Considerations通常クラウド環境は複雑で多くの可動部品を含んでいるため、JITServerのデプロイメントトポロジーはクラスターやインフラストラクチャによって異なる場合があります。このセクションでは、ほとんどのクラスターでJITServerテクノロジーの機能とパフォーマンスを最適化するための経験則を紹介します。VersionJITServerテクノロジーは、JITServerとクライアントJVM間のバージョン互換性を強制することに注意してください。JITServerの使用を前提にデプロイメントを構成する場合、バージョンの不一致があると、JITServerはクライアントからの接続を拒否し、パフォーマンスの低下やクライアントでのメモリ不足の原因となる可能性があります。OpenJ9コンテナ・イメージをベースにすることです。これにより、JITServerとクライアントJVMの両方で同じJDKリリースバージョンが保証されます。AdoptOpenJDK.https://hub.docker.com/_/adoptopenjdkもう一つの方法は、手動でJDKのリリースバージョンを照合することです。実行し、JDKのリリースバージョンを確認します。amd64アーキテクチャで動作しています。Hubから該当するイメージを探します。OpenJDKイメージにオーバーライドします。以下のように設定します。Topology同じJDKリリースバージョンを実行しており、JITServerインスタンスに十分なリソースが割り当てられている限り、1つのJITServerインスタンスに1つ以上のクライアントJVMを接続できます。1つのクライアントJVMが複数のJITServerインスタンスに接続することはできません。Kubernetes環境でこれを防ぐには、JITServerのサービスでservice.spec.sessionAffinityをClientIPに設定する必要があります。通常Kubernetesクラスターは、クラスターのワークロードに基づいて自動的にPodをノードに割り当てます。ワークロードについて追加情報を持つ開発者であれば、ノードアフィニティの助けを借りて、さらにパフォーマンスを最適化するために、特定のノードにPodを手動で割り当てることができます。このテクニックは、クライアントJVMとJITServerのPodを同じノードに配置して、両者間のネットワークレイテンシーを最小化するために使用されることもあります。Management場合によっては、クライアントJVMをより新しいバージョンのJavaにアップグレードしたいこともあるでしょう。JITServerインスタンスは、それが提供するクライアントJVMと互換性がなければなりません。chartをもう一つデプロイし、その後古いJITServerインスタンスを削除することです。可能な限り、クライアントJVM(アプリケーション)が終了する前にJITServerインスタンスを削除することは避けてください。クライアントJVMを実行しているコンテナのメモリ制限が、JITServerがすべてのJITコンパイルを処理するという前提で設定されている場合、アプリケーションがネイティブメモリの不足に陥り、終了してしまう可能性があります。すべてのアプリケーションがリタイアしたら、以下のようにJITServerインスタンスを安全に削除できます。Allocation以下は、JITServerインスタンスに1つのアプリケーションが接続することを想定した場合の、JITServerのCPUおよびメモリリソースの推奨最小値です。なし1つのJITServerインスタンスに複数のアプリケーションが同時に接続する場合は、上記の値を適宜かけ算してください。複数のアプリケーションが時間をずらしてJITServerに接続する場合(アプリケーション間に多少の遅延がある場合)は、上記の要求値を下げることができます。Serverを使い、この上でJITServerテクノロジーを有効にするプロセスをステップ・バイ・ステップで説明します。hubで公開されています。18.04https://hub.docker.com/_/open-libertyこのデモで使用されているアプリケーションイメージは、open-liberty:21.0.0.2-full-java8-openj9で、adoptopenjdk:8u282-b08-jre-openj9-0.24.0をベースイメージとして使用しており、これをJITServerとしてデプロイされていることに注意してください。chartを使ってJITServerインスタンスとしてOpenJ9イメージをデプロイします。オーバーライドしてください。アプリケーションデプロイ時にJITServerテクノロジーを有効化JITServerインスタンスをデプロイしたら、JITServerテクノロジーを有効にするJVMオプションを設定したJavaアプリケーションイメージをデプロイします。Libertyのアプリケーションをデプロイします。クライアントJVMに渡します。verboseログやコンテナのリソース消費を観察し、JITServerテクノロジーが動作していることを確認JITServerインスタンス上で生成されるverboseログは、JITServerが有効であることの指標になります。これは、JVMオプションに-Xjit:verbose={JITServer}を追加し、JITServerのverboseログが/tmp/output.logに表示されていることを確認することで実現できます。JITServerテクノロジーは、クラウドやリソースに制約のある環境でJavaアプリケーションを実行している方にはぜひ試していただきたい機能です。chartは、KubernetesやOpenShiftのクラスター上でのデプロイメントプロセスを自動化してくれます。chartにはデフォルトの設定が盛り込まれており、3つのシンプルなステップでJITServerをデプロイできます。JVM上でJITServerテクノロジーを有効にすることで、コンテナのサイズを小さくし、スループット性能を向上させることができます。chartリポジトリや、JITServerに関する興味深いブログをご覧ください。コメントをキャンセルコメントを入力してください。以下に詳細を記入するか、アイコンをクリックしてログインしてください。アカウントを使ってコメントしています。アカウントを使ってコメントしています。新しいコメントがついたらメールで通知。Inside現在40人フォロワーがいます。購読管理このバーを折りたたむ%d人のブロガーが「いいね」をつけました。