Infobox Jelastic Cloud HostingのJavaガベージコレクション

パフォーマンスと価格は、アプリケーションホスティングで最も重要な2つの要素です。 アプリケーションのパフォーマンスを損なうことなく、どのように費用を削減するかをよく自問します。 この記事では、ガベージコレクションとJelastic GCエージェントを使用して、 Infobox JelasticクラウドホスティングサービスでホストされるJavaアプリケーションの自動メモリ管理を検討します。 記事の最後で、少し驚きました。

Infobox Jelastic reduce costs

最初に、ガベージコレクションとは何か、そしてそれがJavaアプリケーションに対して何をするのかを定義しましょう。 次に、Jelasticのガベージコレクションプロセスについて詳しく説明します。

Javaのガベージコレクション:materiel


ガベージコレクション(GC)は、自動メモリ管理の一種です。 その目的は、アプリケーションで不要になったメモリ内のオブジェクトを検索し、将来の使用のためにスペースを解放することです。

作成されたオブジェクトは、このオブジェクトへの参照がある限り割り当てられたままの一定量のメモリを使用します。 オブジェクトへの参照がない場合、オブジェクトは不要と見なされ、そのオブジェクトが占有していたメモリは解放できます。 したがって、未使用のリソースに料金を支払う必要はなく、コストを削減できます。

JelasticのGCデフォルト設定


ユーザーが設定を指定しない場合、Jelasticはガベージコレクタを次のように設定します:

この場合、特定の時点で消費されるクラウドレットの数は重要ではありません。 ガベージコレクターは、最大制限(対応するサーバーに割り当てたCloudletの最大許容数)をチェックします。

Infobox Jelastic Scaling Limit

ParNewガベージコレクター


ParNewは、「世界を止める」マルチスレッドガベージコレクターです。 彼は若い世代のオブジェクトを収集します。 若い世代は通常サイズが小さいため、Jelasticではこのコレクターはリソース制限が8 GB未満のサーバーにのみ使用されます。 オブジェクトのサイズに基づいたアセンブリは非常に迅速に機能し、アプリケーションの機能にわずかに影響します。 さらに、ParNewコレクターは未使用のメモリを解放できるため、垂直方向の自動スケーリングが正しく機能します-Jelasticの主要な機能の1つです。

ガベージ–最初のガベージコレクター


ガベージファースト(G1)-大量のメモリを備えたマルチプロセッサマシン用のサーバータイプのガベージコレクタ。 ヒープは固定サイズの領域に分割され、G1はこれらの領域のライブデータを追跡します。 ガベージコレクションが必要な場合、gcはライブデータの少ない領域から開始します。

G1は、ガベージコレクションの遅延が制限された大きなヒープを必要とするアプリケーションに焦点を当てています。 詳細な分析の結果、G1を適用するには8 GBのメモリ消費で十分であるという結論に達しました。

これらの設定とともに、専用のJelasticガベージコレクションエージェントを使用して、OSで使用されているJVMメモリを解放します。

JelasticのGC設定のカスタマイズ


JelasticのデフォルトのGC設定がアプリケーションにとって最適ではないことが確実な場合は、ニーズに応じて設定できます。 設定を変更するのは、アプリケーションのパフォーマンスに対して行うアクションを完全に理解している場合のみにすることをお勧めします。

アプリケーションの要件に基づいて、ガベージコレクション(GC)設定を設定できます。

1. Tomcat、TomEE、またはJettyを構成するには、Javaサーバーの構成ファイルを開きます。



2. サーバー > variables.confファイルに移動します。



3.開いているvariables.confファイルで、GCパラメーターとして次の値のいずれかを設定することにより、必要なガベージコレクターを指定できます。

-XX:+UseParNewGC -XX:+UseG1GC -XX:+UseConcMarkSweepGC -XX:+UseSerialGC 

4. GlassFishをセットアップするときは、同じGCパラメーター形式を使用する必要があります。
GlassFish管理パネルを開き、 [設定] > [ gfcluster-config ] > [ JVM設定] > [ JVMオプション ]に移動し、次の図に示すように対応する行を編集します。



5.その後、Javaサーバーを起動すると、割り当てられたリソースに関係なく、指定したガベージコレクターのみが使用されます。

Jelastic GCエージェントは、2種類のガベージコレクターでのみ動作することに注意してください。

 -XX:+UseParNewGC</li> -XX:+UseG1GC</li> 

別のガベージコレクタを手動で指定すると、完全なガベージコレクションは無効になります。

6.また、ガベージコレクタのプロセッサパワーの使用を減らし、JVMがヒープメモリを使用する方法を制御することもできます。 これを行うには、-Xmxおよび-Xmsオプションを指定して、ガベージコレクションの起動頻度を構成する必要があります。

-Xmxオプションは 、大きな最大ヒープボリュームでJVMを起動し、重要なプロセスのためにCPU時間を解放するために使用されます。

-Xmsオプションは、JVMメモリヒープの初期サイズが最大割り当てメモリ制限(スケーリング制限)と等しくなるようにします。

これらのパラメーターは、Tomcat、TomEE、およびJettyのvariables.confファイル、またはGlassFishのJVM設定で指定する必要があります。

 -Xmx<>m -Xms<>m 



Jelasticガベージコレクションエージェント


垂直自動スケーリングには、OSで予約されているが同時に使用されていないJVMメモリのリリースが必要です。 したがって、Jelasticは特別なガベージコレクションエージェントを使用します。

Jelastic GCエージェントには、消費メモリと空きメモリを監視するためのインテリジェントなアルゴリズムが含まれています。 監視結果を処理し、OSのメモリの一部を解放する可能性を認識し、完全なガベージコレクションを開始します。 JVMにOS用に解放できる空きメモリがない場合、Jelastic GCエージェントは完全なガベージコレクションを開始しません。 このアプローチにより、アプリケーションのパフォーマンス低下をゼロに抑えることができます。

Jelastic GCエージェントは、2種類のガベージコレクターでのみ機能します(Jelasticでデフォルトで設定されます):

 -XX:+UseParNewGC -XX:+UseG1GC 

デフォルトのGCを、圧縮をサポートせず、OSのメモリを解放しない他のGCに変更すると、GC Jelasticエージェントが無効になり、フルガベージコレクションを開始できなくなります。

JelasticエージェントGCを設定するには、Tomcat、TomEE、またはJettyサーバーのserver > variables.confに移動します。



GlassFish GCの場合、Jelasticエージェントはgfcluster-config > JVM Settings > JVM OptionsのGlassFish管理パネルから設定または無効化できます。



Jelastic GCエージェントを有効/無効にする


Jelastic GCエージェントは、新しく作成されたすべてのJavaアプリケーションサーバーでデフォルトで有効になっています。

既存のコンテナでGC Jelasticエージェントを有効にするには、次のようにjelastic-gc-agent.jarファイルをダウンロードして、エージェントを手動で有効にする必要があります。
1. jelastic-gc-agent.jarファイルをダウンロードします
2. Javaサーバーの構成ファイルに移動し、ダウンロードした.jarファイルをホームフォルダーにダウンロードします。



3. server > variables.confファイルに移動し、 -javaagentパラメーターでjelastic-gc-agent.jarファイルへのパスを指定します。
パスは、使用しているJavaサーバーによって異なります。

4.変更を保存し、サーバーを再起動します。

JelasticエージェントGCプロセスがアプリケーションのパフォーマンス低下を引き起こしたことに気付いた場合、次の行をコメントアウトしてサーバーを再起動してください。
-javaagent:/var/lib/jelastic/java/jelastic-gc-agent.jar

検査期間の変更


デフォルトでは、Jelastic GCエージェントは15分ごとにシステムをチェックし(JVMが起動するたびに起動します)、アプリケーションの未使用メモリを強制します。 検証期間は、必要に応じて変更できます。

スキャン期間を変更するには、以下に示すように、フルガベージコレクションの開始間隔を秒単位で指定します。

-javaagent:/var/lib/jelastic/java/jelastic-gc-agent.jar=period=900



変更を適用するには、ファイルを保存してサーバーを再起動します。

デバッグモードをオンにする


次のようにデバッグモードを有効にできます。

-javaagent:/var/lib/jelastic/java/jelastic-gc-agent.jar=debug=true

その結果、GCログのプロセスを追跡できます。

両方のオプション(スキャン期間の変更とデバッグモードの有効化)を一緒に使用できることに注意してください。

-javaagent:/var/lib/jelastic/java/jelastic-gc-agent.jar=debug=true,period=900



変更を保存し、サーバーを再起動します。

ガベージコレクションの結果を確認する


構成された定期的なシステムチェックの結果を表示し、メモリを解放するには、特別なローダーアプリケーションを使用します。

1.リンクをたどり 、テストアプリケーションでLoader.warアーカイブをダウンロードします。

2.この.warアーカイブをJelasticにダウンロードします

3.このアプリケーションをJavaアプリケーションのある環境にデプロイします。

4. 構成ファイルを開き、 server > variables.confファイルに移動して、JelasticエージェントのJava設定を確認します。



この例では、できるだけ早く結果を取得するために、期間の期間を60秒に変更しました。 設定を変更する場合は、変更を保存してサーバーを再起動してください。

5.その後、ブラウザーでアプリケーションを開き、次のパラメーターをリンクに追加します。
/ loader?mem = 500&duration = 300






6.これで統計に移動できます。しばらくすると、結果が表示されます。



パラメータをリンクに追加してアプリケーションリクエストを実行すると、メモリ消費が500 MB増加します。 このメモリ量は300秒使用されます(指定されたパラメーターに従って)。

その後、GC Jelasticエージェントが完全にガベージコレクションを開始する結果、メモリ使用量が減少します。 これは、アプリケーションがアクティブなプロセスを完了し、全メモリを必要としなくなったため、GCエージェントがメモリを解放する機会を見つけたためです。

テストアプリケーションをさらに数回実行して、メモリをロードし、メモリを解放するプロセスを確認できます。



7. Javaエージェントのデバッグモードを有効にしているため、 ログファイルでプロセスを追跡することもできます。



使用可能な空きメモリの量(バイト単位)は、 catalinaログで確認できます。



したがって、この方法を使用すると、アプリケーションのメモリ管理を改善でき、JVMのメモリ消費を削減できます。 その結果、お金を節約し、アプリケーションの生産性を向上させることができます。

Jelasticをギフトとして300ルーブル!


記事の最後まで読んだすべての人に、Jelasticアカウントに300ルーブルを渡します。 試用版に登録し、試用期間が終了したら、Jelasticの「有料版に切り替える」ボタンをクリックし、あなた自身に関する情報を記入し、ユーザー名をtrukhinyuri@infoboxcloud.comに送信します。

InfoboxでのJelasticの使用に成功し、気分が良い!

Source: https://habr.com/ru/post/J230663/


All Articles