私の会社では、JVMベースのマイクロサービスでアプローチを試みています。それらは水平にスケーリングされるように設計されているため、比較的小さなコンテナ(最大2Gヒープ、通常は1-1.5G)を使用して、それぞれ複数のインスタンスを実行します。使用するJVMは1.8.0_40-b25です。小さなヒープを持つマイクロサービスのXmx/GCのデフォルトの設定
このようなインスタンスのそれぞれは、最大250 MB/sのメモリ割り当て率で最大100 RPSを処理します。
問題は、どのような種類のGCが最初から安全で分かりやすいデフォルトになるのでしょうか?これまで、Xms = Xmx(ヒープリサイズ中のポーズを避ける)とXms = Xmx = 1.5GのCMSを使用しています。結果はまあまあです - メジャーGCが実行されたことはほとんどありません。
私はG1が(全体のスループットを犠牲にして)より小さい休止を与えることができることを知っていますが、AFAIKは適切に動作するにはもう少し「呼吸」スペースと少なくとも3-4Gのヒープが必要です。
ヒント(Azul's Zing:Dに行く以外に)
実際にデータを投稿せずに「結果はまともだ」と言います。 GCログ、JVMオプション、システム構成、相対的なゴールの優先順位(平均ワーストケースの一時停止時間/スループット/フットプリント)などがあります。 – the8472
私は解決策ではなくヒントを求めています。さらなる最適化/分析を開始するのに十分な場所を探しています。 –
としてください。その後、oracleのGCチューニングガイド(すべて)を読み、GCViewerを使用してください。 – the8472