Java Performance on kubernetesの要約
Kubernetes上でのJavaアプリケーションの実行に関するリソース制限(CPUとメモリ)がアプリケーションのパフォーマンスに与える影響について解説している動画 を見たので要約
- リソース制限の影響
- NewRelicの調査によると多くのJavaアプリケーションが1つまたは2つのCPUコアと512MB以下のメモリ制限で実行されているらしい
- 2つのCPU、1GBの割り当てでもGCのアルゴリズムはSerial GCになる
- ガベージコレクタの選択と設定
- Serial GCだとG1よりStop The Worldが長い
- 一般的にG1より効率が悪い
- JVMの設定
- ヒープサイズに関しては自分で設定したほうがいい
- 1GB割り当てた時に256MBしか割り当てられなかったりするため
- スタートアップ時間の最適化
- 多くのフレームワークがCPUの数でスレッドプールの数を設定してる
- クラスタとアプリケーションのスケーリング戦略
- Javaアプリケーションがスケールアップ(リソースを増やす)方がスケールアウト(インスタンス数を増やす)よりも効率的である場合が多いこと, そして適切なクラスタサイズとアプリケーションの設定が重要であるらしい