JSUG勉強会2020その5 Spring Boot 2.3 徹底解説 に参加しました。今回はオンライン開催。簡単に所感をまとめます。
所感
Wavefront は初めて知りましたが、VMware が提供するサービスなんですね。k9s や コンテナ向けの機能がどんどん追加されていきますね。ヒープメモリの割り当ての説明が参考になりました。Memory Calculator は便利そう。
YouTube の URL はこちら。
https://youtu.be/mQC7yPTAE5oyoutu.be
以下、メモから抜粋。
Deep dive into Spring Boot 2.3
- Boot 2.3 からは半年に1回リリースに
- Spring Data のメジャーアップデートに対応するため
- Gradle バージョンアップ (6.3+) が必要
- k9s Support
/actuator/health
エンドポイント- HealthIndicator
- 外部サービス向けのヘルスチェック?
- k9s コンテナのヘルスチェックには不向き
- Liveness State
- プロセス内部の状態のヘルスチェック
- NGの場合はプロセス再起動する (コンテナ再作成)
/actuator/health/liveness
- 外部サービスのヘルスチェックは含めない☆
- コンテナを再起動しても外部サービスが復旧するわけではない
- Readiness State
- Liveness と Readiness の間に任意の処理を入れられる☆
- リクエストを受ける前にキャッシュをロードしたり
- k9s 環境ではデフォルトでエンドポイントは有効
- k9s 以外では明示的に要設定
- HTTP エンドポイントの他に、イベントの終了結果に応じてコマンドで状態を変えられる☆
- Graceful Shutdown
- レスポンスを返す前にシャットダウンするとエラーになったり
- 高負荷な状態でシャットダウンすると不整合が起きたり
- Boot 2.2 までは自前で実装
server.shutdown=graceful
spring.lifecycle.timeout-per-shutdown-phase
- シャットダウンまでの猶予時間?(デフォルト30s)
- 新規リクエストは受け付けない
- Docker Image Support
- チュートリアルの Dockerfile では不十分
- Dockerfile 以外でも Docker Image は作成可能
- Cloud Native Buildpacks
- Buildpack の Docker Image ではロード済みのレイヤー (ミドルウェア) は再利用される?
- push/pull されない
- コンテナのメモリサイズと -Xmx の設定値を同じにするのはNG
- ノンヒープの分を考慮する必要あり
- Memory Calculator
- ヒープサイズ = コンテナメモリ - ノンヒープ
- jar 内のクラスファイル数, MetaSpace, Thread Stack など
- ノンヒープがコンテナメモリを超える場合はエラー
- スレッドや Reserved CodeCache の分を減らしたり
- Memory Calculator のパラメータと Tomcat などのパラメータは合わせる
- Head Room
- Java 以外のプロセスが利用するメモリ
- Memory Calculator は個別に利用可能
- JVMKill Agent
- OOME が発生したときにプロセスを kill する
- k9s のときに適宜コンテナを再作成してクリーンな状態に
- Layered Jar Format
- アプリのレイヤーをさらに細分化 (application/dependencies)
- 依存ライブラリの更新頻度は高くないので push/pull 不要
- Dockerfile multi-stage builds と組み合わせると Dockerfile でも可
- デフォルトではレスポンスに例外メッセージを含めなくなった
server.error.include-message
,server.error.include-binding-errors
で変更可
- spring-boot-starter-validation が含まれなくなった
- spring-boot-properties-migrator
- Wavefront
- GraalVM Native