- JDK 23対応GraalVM (最新)
- JDK 24対応GraalVM (早期アクセス)
- JDK 21対応GraalVM
- JDK 17対応GraalVM
- アーカイブ
- 開発ビルド
TruffleRubyのデプロイ
TruffleRubyを本番環境にデプロイすることを検討している場合は、現状で何が可能か、また発生する可能性のある問題の解決を支援するために、ご連絡いただくことをお勧めします。
このドキュメントでは、TruffleRubyの異なるランタイム設定について詳しく説明します。
TruffleRubyランタイム設定 #
TruffleRubyには、主にネイティブとJVMの2つの設定があります。それぞれの設定には異なる機能とパフォーマンス特性があるため、TruffleRubyの異なる設定を理解することが重要です。アプリケーションに適した実行モードを選択する必要があります。
ネイティブ設定 #
ネイティブスタンドアロンでは、TruffleRubyはネイティブ設定で実行されます。この設定では、TruffleRubyはスタンドアロンのネイティブ実行可能ファイルに事前コンパイルされます。つまり、システムにJVMがインストールされていなくても使用できます。
ネイティブ設定の利点は、MRIとほぼ同じ速度で起動し、メモリ使用量が少なく、JVM設定よりも短時間で高速になることです。欠点は、VisualVMなどのJavaツールを使用できないこと、Javaとの相互運用性が低いこと(詳細はこちらを参照)、ピークパフォーマンスがJVMよりも低い可能性があることです。
ネイティブ設定はデフォルトで使用されますが、`--native`を使用してリクエストすることもできます。_ネイティブ_設定でポリグロットプログラミングを使用するには、`--polyglot`フラグを渡す必要があります。
JVM設定 #
TruffleRubyは、JVM設定(JVMスタンドアロンを使用するか、埋め込みによって)でも使用できます。この場合、JVM上で通常のJavaアプリケーションとして実行されます。JVM設定の利点は、Javaとの相互運用が容易であり、_ピークパフォーマンスがネイティブ設定よりも高い可能性があること_です。欠点は、起動と高速化に時間がかかり、メモリ使用量が多くなる可能性があることです。`--jvm`を渡すことで、JVM設定を選択できます。
最適な設定の選択 #
短時間実行されるプログラムを実行する場合は、デフォルトの_ネイティブ_設定が適しています。長時間実行されるプログラムを実行し、可能な限り高いパフォーマンスが必要な場合は、`--jvm`を使用して_JVM_設定を使用するのが適しています。
最適な起動時間パフォーマンスの獲得 #
ほとんどの場合、最適な起動時間を得るには、デフォルトのネイティブ設定を使用するのが適切です。
最小メモリフットプリントの獲得 #
最小のメモリフットプリントを得るには、最初はネイティブ設定を使用するのが適していますが、オブジェクトのワーキングセットが大きくなるにつれて、単純なガベージコレクターと現在の圧縮されていない通常オブジェクトポインター(OOPS)がメモリフットプリントを増加させる可能性があり、`--jvm`を使用してJVM設定を使用することでメモリ使用量を削減できる場合があります。
TruffleRubyから最高のピークパフォーマンスを引き出す #
長時間実行されるアプリケーションでTruffleRubyから最高のピークパフォーマンスを引き出すには、ほとんどの場合、`--jvm`を使用したJVM設定をお勧めします。
ただし、このピークパフォーマンスに到達するには、高度に最適化されたほとんどの仮想マシンと同様に、TruffleRubyを_ウォームアップ_する必要があります。これは、一定期間、負荷をかけてアプリケーションを実行することで行います。パフォーマンス(操作時間または応答時間を測定することで)を監視すると、時間の経過とともに低下し、その後安定する可能性があります。
ロギング #
Rubyアプリケーションのロギングと警告は、Rubyの標準実装と同様に機能します。
TruffleRuby内部のロギングには、標準のJavaロギングが使用されます。ロギングレベルは、`--log.level=INFO`、`=FINEST`などで設定できます。