TruffleRubyのデプロイ

本番へのTruffleRubyのデプロイを試みる場合は、その時点で何ができるかを理解し、問題の解決に役立てるために、オラクル社に問い合せていただくことをお薦めします。

このドキュメントでは、TruffleRubyの様々なランタイム構成について詳しく説明します。

TruffleRubyのランタイム構成

TruffleRubyには、ネイティブJVMの2つの主要な構成があります。それぞれには異なる機能とパフォーマンス特性があるため、TruffleRubyの様々な構成を理解することが重要です。アプリケーションに適した実行モードを選択する必要があります。

ネイティブ構成

GraalVMの一部として配布される場合、TruffleRubyはデフォルトでネイティブ構成で実行されます。この構成では、TruffleRubyはスタンドアロンのネイティブ実行可能ファイルに事前にコンパイルされます。つまり、JVMを使用するためにシステムにJVMをインストールする必要はありません。

ネイティブ構成のメリットは、MRIとほぼ同じ速さで起動し、使用するメモリーが少なく、JVM構成よりも短時間で高速になることです。デメリットは、VisualVMなどのJavaツールを使用できないこと、Java相互運用性(詳細はここを参照)の利便性が低いこと、およびピーク・パフォーマンスがJVMよりも低い可能性があることです。

デフォルトではネイティブ構成が使用されますが、--nativeを使用してリクエストすることもできます。ネイティブ構成でポリグロット・プログラミングを使用するには、--polyglotフラグを渡す必要があります。

JVM構成

TruffleRubyは、JVMで通常のJavaアプリケーションとして実行されるJVM構成でも使用できます。JVM構成のメリットは、Java相互運用性を簡単に使用できること、およびピーク・パフォーマンスがネイティブ構成よりも高くなる可能性があることです。デメリットは、起動と高速化に非常に時間がかかり、より多くのメモリーを使用する可能性があることです。JVM構成は、--jvmを渡すことで選択できます。

最適な構成の選択

短時間のプログラムを実行する場合は、デフォルトのネイティブ構成が必要です。実行時間の長いプログラムのパフォーマンスを可能なかぎり高めるには、--jvmを使用することによってJVM構成を使用することが役立つ場合があります。

最高の起動時間パフォーマンスの実現

ほとんどの場合、デフォルトのネイティブ構成を使用することで、最良の起動時間が実現します。

メモリー・フットプリントの最小化

メモリー・フットプリントを最小にするには、最初はネイティブ構成を使用することが適していますが、オブジェクトのワーキング・セットが大きくなると、ガベージ・コレクタが単純であることと、圧縮された通常のオブジェクト・ポインタ(OOPS)が欠落していることによって、メモリー・フットプリントが増加することがあり、このような場合には、--jvmを使用してJVM構成を使用した方が、メモリー使用量が減ることがあります。

TruffleRubyの最高のピーク・パフォーマンスの実現

TruffleRubyで、実行時間の長いアプリケーションの最高のピーク・パフォーマンスを実現するには、ほとんどの場合、--jvmを使用したJVM構成をお薦めします。

ただし、このピーク・パフォーマンスに達するには、仮想マシンを最も高度に最適化する場合と同様に、TruffleRubyをウォームアップする必要があります。これを行うには、負荷がかかっている状態でアプリケーションを一定期間実行します。(操作時間またはレスポンス時間を測定して)パフォーマンスをモニターすると、時間の経過とともにパフォーマンスが低下し、その後ほとんどの場合安定します。

ロギング

Rubyアプリケーションのロギングおよび警告は、Rubyの標準実装と同様に機能します。

TruffleRuby内部のロギングには、標準のJavaロギングが使用されます。ロギング・レベルは、--log.level=INFO=FINESTなどを使用して設定できます。