Slide 1

Slide 1 text

© 2024 Loglass Inc. 1 © 2024 Loglass Inc. OOM発生時のトラブル シューティング Profilerを活用できる か調査してみた 宮本 淳志 2024.11.20

Slide 2

Slide 2 text

© 2024 Loglass Inc. 2 自己紹介 自動車整備士としてキャリアをスタートし、退職後カナダのバンクーバーへ渡航。その後、プログラミン グを現地の学校で勉強した後に、機械学習エンジニアとして現地のスタートアップでエンジニアとして のキャリアをスタートさせる。 2年半カナダに滞在したのち、福岡へ移住。 福岡の受託開発会社でバックエンドエンジニアとして3年ほど勤務。バックエンド・フロント・インフラの 経験を積む。 2024年10月に株式会社ログラスへクラウドエンジニアとして入社。 株式会社ログラス クラウドエンジニア 宮本 淳志 Atsushi Miyamoto

Slide 3

Slide 3 text

© 2024 Loglass Inc. 3

Slide 4

Slide 4 text

© 2024 Loglass Inc. 4 Loglassについて

Slide 5

Slide 5 text

© 2024 Loglass Inc. 5 Loglassについて

Slide 6

Slide 6 text

© 2024 Loglass Inc. 6 今日話すこと 1. OOM (OutOfMemoryError)の理解と事例 2. Datadogによる監視 3. Datadog Profilerの調査と考察 4. 現在の取り組みと今後やっていきたいこと Agenda

Slide 7

Slide 7 text

© 2024 Loglass Inc. 7 01 OOMの理解と事例

Slide 8

Slide 8 text

© 2024 Loglass Inc. 8 01|OOMの理解と事例 JVMにおけるメモリ管理 Eden空間 Survivor空間 Tenured空間 ヒープ メモリ クラスのすべてのインスタンスと配列はヒープメモリに格納される Young世代 Old世代 非ヒープ メモリ メタスペースと呼ばれる、クラス定義などのメタデータや コードキャッシュ(コンパイルされたネイティブコード)などが格納される ガベージコレクション(GC) 不要となったオブジェクトを解放し、メモリを再利用可能にする ● Minor GC Young世代の無効なオブジェクトを削除し、有効なオブジェクト はEdenからSurvivor空間へ ● Full GC (Major GC) ヒープ全体のガベージコレクションが実施され、メタスペースやダ イレクトメモリなどの領域も解放される ※参考: https://learn.microsoft.com/ja-jp/azure/spring-apps/basic-stan dard/concepts-for-java-memory-management ダイレクト メモリ nioやgzipなどのサードパーティのライブラリで使用される

Slide 9

Slide 9 text

© 2024 Loglass Inc. 9 01|OOMの理解と事例 OOM エラーの種類と原因 ● Java heap space エラータイプ: java.lang.OutOfMemoryError: Java heap space 原因: ヒープ領域を使い果たした時に発生 特に大量のオブジェクトが生成された場合や適切にガベージコレクションが行われない場合 ● Metaspace エラータイプ: java.lang.OutOfMemoryError: Metaspace 原因: メタスペースはクラスのメタデータなどが格納される領域 クラスの読み込みが増加したり、過剰に動的にクラスが生成された場合 ● Direct buffer memory エラータイプ: java.lang.OutOfMemoryError: Direct buffer memory 原因: NIOを使用して、ダイレクトバッファを利用している場合に発生 ヒープメモリとは別の領域でメモリ管理される。これが枯渇した場合 etc...

Slide 10

Slide 10 text

© 2024 Loglass Inc. 10 01|OOMの理解と事例 java.lang.OutOfMemoryErrorが発生し、コンテナが停止した ログラスではインフラに AWS ECS on Fargateを使用しており、ECS上でサービスが 稼働している 障害内容 1. アプリケーションでメモリを大量に使用する処理が実行 2. Full GCが実行 3. java.lang.OutOfMemoryErrorが発生 4. アプリケーション異常終了 5. ヘルスチェックが通過しなくなり、コンテナ停止 実際の事例 参考: https://zenn.dev/loglass/articles/547c64a172f170

Slide 11

Slide 11 text

© 2024 Loglass Inc. 11 02 Datadogによる監視

Slide 12

Slide 12 text

© 2024 Loglass Inc. 12 02|Datadogによる監視 現状のアーキテクチャ ● ECS on Fargate サイドカーとしてDatadog AgentとFluentBitが稼働 アプリケーションログやコンテナのメトリクスを監視・取得しDatadogへ集約

Slide 13

Slide 13 text

© 2024 Loglass Inc. 13 02|Datadogによる監視 Slackへアラート通知

Slide 14

Slide 14 text

© 2024 Loglass Inc. 14 02|Datadogによる監視 OOM発生時ヒープダンプみたい!!

Slide 15

Slide 15 text

© 2024 Loglass Inc. 15 03 Datadog Profilerの調査と考察

Slide 16

Slide 16 text

© 2024 Loglass Inc. 16 03|Datadog profilerの調査と考察 Heapdump vs Profiler そもそもHeapdumpと同等の内容を profilerで確認できる?? Profiler アプリケーションのパフォーマンスを分析し、パフォーマンスの 低いコードを改善するために使うツールです。 メモリの利用状況、CPU の利用状況、その他のアプリケーショ ン レベルの問題を診断できます。 アプリケーションの実行中に パフォーマンス データを収集できます。 引用元: https://learn.microsoft.com/ja-jp/visualstudio/pr ofiling/what-is-a-profiler?view=vs-2022 Heapdump Java ヒープダンプは、特定時に作成されたJVMヒープのス ナップショットです。ヒープダンプの作成および分析は、Javaア プリケーションの問題の分析やトラブルシュートに役立つことが あります。 引用元: https://docs.redhat.com/ja/documentation/red_h at_jboss_enterprise_application_platform/7.3/html /performance_tuning_guide/heap_dumps

Slide 17

Slide 17 text

© 2024 Loglass Inc. 17 03|Datadog profilerの調査と考察 実際に確認してみた

Slide 18

Slide 18 text

© 2024 Loglass Inc. 18 03|Datadog profilerの調査と考察 あれ.. タイミングによってはOOMが発生した直前のデータは取れてないか も..?

Slide 19

Slide 19 text

© 2024 Loglass Inc. 19 03|Datadog profilerの調査と考察 考察 プロファイルのデータの収集間隔は60秒 Datadogにデータが渡る前にコンテナが停止して、データが送れ ていないのかも??

Slide 20

Slide 20 text

© 2024 Loglass Inc. 20 04 現在の取り組みと今後やっていきたこと

Slide 21

Slide 21 text

© 2024 Loglass Inc. 21 04|現在の取り組みと今後やっていきたいこと S3に直接heapdumpをアップロード -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heap_dump.hprof -XX:OnOutOfMemoryError=/dump.sh 起動オプションを設定し OOM発生時にS3へアップロードする仕組み

Slide 22

Slide 22 text

© 2024 Loglass Inc. 22 04|現在の取り組みと今後やっていきたいこと 断念した理由 ● ダンプ開始からS3にアップロード完了するまでの時間が長い(5min 〜 10min) ● これによりALBのヘルスチェックに引っかかり、ダンプ完了するのを待たずにコンテナが停止して しまう

Slide 23

Slide 23 text

© 2024 Loglass Inc. 23 04|現在の取り組みと今後やっていきたいこと 今後 ● Datadog Profiler使っていく ● 開発者側へDatadogの使い方を伝授

Slide 24

Slide 24 text

© 2024 Loglass Inc. 24