GraalVM 19.3サポートの遅延-Quarkus 1.2で予定-理由は次のとおり

この記事は、Quarkus.io のブログ記事、Delay in GraalVM 19.3 support - planned for Quarkus 1.2 - here is why の翻訳記事です。

Quarkus 1.1.0.CR1で待望の機能のひとつがGraalVM 19.3のサポートです。GraalVM 19.3は非常に多くの点で変更がありますが(JDK11プレビューなど)、QuarkusとGraalVMの緊密な統合のおかげで、GraalVM 19.2と19.3を同時にサポートすることができなかった私たちにとっては、全てか、ゼロか、のアップデートでした。

QuarkusをGraalVM 19.3に移植する間に、いくつかの再発した不具合を経験しましたが、その中にはQuarkusが適切に動作していない(私たちはそれらを修理済)、あるいはGraalVMの再発した不具合(私たちはGraalVMチームと協力してそれらを修正中)によるものもありました。GraalVMの次のマイクロバグフィックスリリースは1月中旬に予定されているため、Quarkusから代替案を作成することで回避策を実行する必要がありました。

例え、良くはなかったとしても、最終的な結果は十分にしっかりしていたので、GraalVM 19.3サポート付きでCR1を出荷することにしました。

しかし、私たちの1.1.0.FinalはGraalVM 19.2に戻っています。これは難しい決断でした。特に、1.1に向けて準備するために投資されたすべての作業を考えれば、なおさらです。ですから、このバージョンを戻す理由は何なのでしょうか?

私たちは約束を破りたくない

Quarkusが約束していることの1つは、エコシステムはどのJVMでもGraalVMネイティブイメージ実行可能ファイルと同様にうまく動作するということです。また、面倒な作業をしなくてもネイティブイメージを作成できることです。

多くの問題がこれから外れていました。

  • ランダムに発生する同時実行性の問題により、ネイティブ・イメージの作成が失敗することがありました。

  • Neo4Jの拡張機能と、より一般的なNeo4JドライバがGraalVM 19.3では動作しません : https://github.com/oracle/graal/issues/1995

  • Apache Camel Quarkusの統合テストのいくつかは、https://github.com/oracle/graal/issues/1971 のためにネイティブイメージモードでは動作しなくなりました。私たちはこれと共存できたかもしれませんが、それはあなたのアプリケーションのどれにでも起こりうることを意味します。

これらの再発した不具合では、私たちはすでに囲いの上にいて、すでにいくつかの修正を行っていました(下記参照)。しかし、私たちはQuarkusの約束の核心である別のものを見つけました。

RSS(メモリ)使用率の回帰

1.1 .0.CR1のリリース後、起動時のRSS利用量が以前ほど良くないという報告を受けました。RSSは、プロセスの常駐サイズ、つまりプロセスが消費するすべてのメモリーを測定します。

我々の測定では、最初のリクエスト/レスポンスが提供された後、GraalVM 19.2を搭載したQuarkus 1.1は14MBでした。GraalVM 19.3では63MBになりました。Quarkusのメモリ消費量が重要な値であるため、取り消すボタンをクリックし、さらに時間をかけることにしました。

この問題を解決するために、QuarkusとGraalVMチームの間で調査が行われています。詳細については知りたい方は、Quarkusの問題とそれに関連するGraalVMの問題を参照してください。この記事の最後に行き着くとすぐに、GraalVM 19.3上で動くQuarkusへの道筋が解決されます。

それでどうする?

まず、GraalVMインストールを次の1.1 .0.Final向けに19.2 .1にダウングレードする準備をしてください。

私たちの次のリリースではGraalVM 19.3のサポートを全速力で提供する予定です(おそらくGraalVM JDK11もサポートされるでしょう)。並行性の問題はGraalVMのマスターブランチではすでに修正されているので、私たちは低レベルの問題を扱うことができます。私たちの目標は、GraalVMチームがこれらの問題を理解して修正し、これらのすべてをGraalVM 19.3 .1にバックポートすることです。

しかし、もっと基本的に、私たちはそれが再び起こることを望んでいません:ゲームの後半でこれらを発見することは楽しくありません。これらの問題を早期に発見できるように、Quarkusエコシステム全体(コア拡張+quickstarts+Camel拡張+その他の外部拡張)がGraalVMのマスターブランチとうまく連携していることをチェックするいくつかのCIジョブをセットアップしています。これは、(GraalVM)マスタブランチ上の(Quarkus)マスタブランチ上の(Apache Camel Quarkus)マスタブランチとなり少し難解ですが、これが唯一の方法です。私たちはすでに、QuarkusのマスターブランチとGraalVMのマスターブランチでQuickStartの一式をテストするCIジョブを持っています。

また、このCIパイプラインにRSS使用量のチェックを追加する予定です。面白い話ですが、私たちはRSSをテストする別のCIのジョブを持っていましたが、そのレポートはNullPointerExceptionで失敗しています。🤦

私たちの慎重な姿勢と1ヶ月程度の遅れをあなたにご理解いただければ幸いです。

それまでの間、Quarkusの新バージョンには多くのエキサイティングな機能が搭載されているので、準備しておいてくださいね。

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。