LoginSignup
3
2

More than 3 years have passed since last update.

AWS fargateでkotlin(java)アプリをデプロイする方法

Last updated at Posted at 2020-08-27

ポイント

  • fargateのタスク定義の「タスクメモリ」で指定したメモリ量を超えた場合、タスクは強制終了されます。
  • 従って、タスクメモリを超えないように最大ヒープサイズ等を調整する必要があります。

環境

  • 言語: Kotlin
  • フレームワーク: ktor
  • dockerイメージ: openjdk:8-jre-alpine

Dockerfile

FROM openjdk:8-jre-alpine

ENV APPLICATION_USER ktor
RUN adduser -D -g '' $APPLICATION_USER

RUN mkdir /app
RUN chown -R $APPLICATION_USER /app

USER $APPLICATION_USER

COPY ./build/libs/my-application.jar /app/my-application.jar
WORKDIR /app

CMD ["java", "-server", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-XX:InitialRAMFraction=2", "-XX:MinRAMFraction=2", "-XX:MaxRAMFraction=2", "-XX:+UseG1GC", "-XX:MaxGCPauseMillis=100", "-XX:+UseStringDeduplication", "-XX:MaxMetaspaceSize=256M", "-XshowSettings:vm", "-jar", "my-application.jar"]

基本的にはktorのドキュメントを元にしていますが、以下のjavaのオプションを追加しました。

  • -XX:MaxMetaspaceSize=256M : メタスペースの最大値を256MB確保して、それ以上増やさない設定です。 デフォルトでは無制限に拡張できてしまうので、念のため最大値を設定しました。
  • -XshowSettings:vm : 起動時にVMの設定を出力します。

fargateのタスク定義

コンテナの定義で、メモリのハード制限を必ず指定してください。
ここで指定した値が、 docker run--memoryオプションに渡されます。
通常は、タスクメモリと同じ値を指定してください。

スクリーンショット 2020-08-27 16.08.00.png

タスクのログの確認

Fargateのタスクのログを表示し、Max. Heap Sizeが想定した値になっていることを確認してください。
今回の場合は、ハード制限が1000MiBで、javaのオプションが "-XX:MaxRAMFraction=2" なので、500Mとなるのが正しいです。

スクリーンショット 2020-08-27 15.39.23.png

参考

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2