[転帖]いくつかのOpenJDKのJVM性能比較
2283 ワード
いくつかのOpenJDKのJVM性能の比較 https://blog.csdn.net/rjkkaikai/article/details/81016445
JVMにはさまざまな選択肢があります.どれが一番使いやすいですか.いくつかのJVM性能を比較する. Zulu OpenJDK,OpenJDK,Oracle JDK,GraalVM CE.
このブログでは、異なるJVM上で同時にテストを実行するために作成した設定について説明します.また,リソース分離の影響(プロセスに特定のCPUとメモリを割り当てる)についても検討した.この影響は無視できる.私のテストアプリケーションは反応性(非ブロック)Spring Boot RESTアプリケーションで構成されており、PrometheusポーリングJVMとGrafanaを使用して可視化されています.SoapUI以外はすべてDockerコンテナで実行されます.
次のバージョンが使用されています.
https://blog.csdn.net/rjkkaikai/article/details/81016445
CPU使用率
GraalVMは、テスト中にCPU全体の使用率が最も高い.Oracle JDKのCPU使用率が最も低い.
応答時間:
全体的なGraalVMの応答時間は最も短く、OpenJDKが最もよく、Oracle JDKとZuluに続く.平均するとOpenJDKとGraalVMの差は約30%である.
ごみ収集
興味深いことに、GraalVMは他のJDKよりも多くのクラスをロードしています.OpenJDKは最も少ないクラスをロードします.GraalVMとOpenJDKの差は約25%です.これがGraalVMの固定数の追加クラスオーバーヘッドであるかどうか、または使用するクラスの数に比例しているかどうかはまだ確定していません.これは固定パーセントです.これらの追加のクラスは、必ずしも因果関係ではないが、ゴミ収集期間の遅延をもたらす可能性がある.GraalVMより長いGC停止時間.
メモリ使用量
OpenJDK JVMはメモリの大部分を使用します.GraalVMとZuluのゴミ収集動作は似ているようですが、GraalVMはより高い基本メモリ使用率を持っています.Oracle JDKでは、ゴミ収集はそれほど頻繁に行われていないようです.平均値を見るとOpenJDK JVMが使用するメモリが最も多く、Zuluが使用するメモリが最も少ない.縮小されたグラフィックを長時間表示する場合、Oracle JDKとOpenJDKの動作は不安定で、比較的高い値に達する可能性がありますが、ZuluとGraalVMは安定しているように見えます.
まとめ
SOAP UIを使用して負荷テストを行い、応答Spring Boot RESTアプリケーションの1つが、循環haproxy負荷イコライザの後ろにある4つの異なるJVM上で実行されます.5秒ごとにPrometheusを使用してJVMインスタンスをポーリングし(Micrometerを使用してデータを生成)、GrafanaとPrometheusを使用してデータを表示します.その結果、GraalVMはOpenJDKの代替品として適していないことが明らかになった.それは、より悪い表現をし、より多くのリソースを使用し、より多くのクラスをロードし、ゴミ収集により多くの時間を費やすためだ.
もちろん、GraalVMが比較的新しいため、Micrometerが提供する指標は実際のスループットとリソースの使用状況を正しく表示できない可能性があります.私の設定がこのような違いを招いたのかもしれません.私は異なる状況の指標を見て2つ目の問題を排除しようとした.
GraalVMの多言語機能を使用する場合は、他のJVMでは適切な代替案は提供されません.GraalVMは、テストしていないネイティブコンパイルオプションも提供しています(同じJARでテストを実行しました).この機能により、パフォーマンスが大幅に向上する可能性があります.