Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
OOM発生時のトラブルシューティング Profilerを活用できるか調査してみた
Search
Atsushi Miyamoto
November 20, 2024
Technology
1
560
OOM発生時のトラブルシューティング Profilerを活用できるか調査してみた
Japan Datadog User Group Meetup#6の登壇資料です。
Atsushi Miyamoto
November 20, 2024
Tweet
Share
More Decks by Atsushi Miyamoto
See All by Atsushi Miyamoto
Agentic RAG with LangGraph
atsushii
0
440
Asynqを使って、サクッと非同期処理を実現する
atsushii
0
290
LangChainとSupabaseを活用して、RAGを実装してみた
atsushii
1
710
Checkpointerを介して、DynamoDBに状態を保存してみた
atsushii
1
230
Other Decks in Technology
See All in Technology
MySQL HeatWave:サービス概要のご紹介
oracle4engineer
PRO
4
1.7k
Figma + Storybook + PlaywrightのMCPを使ったフロントエンド開発
yug1224
9
2.7k
OpenAPIから画面生成に挑戦した話
koinunopochi
0
160
夢の印税生活 / Life on Royalties
tmtms
0
280
R-SCoRe: Revisiting Scene Coordinate Regression for Robust Large-Scale Visual Localization
takmin
0
430
実践データベース設計 ①データベース設計概論
recruitengineers
PRO
3
260
Goss: Faiss向けの新しい本番環境対応 Goバインディング #coefl_go_jp
bengo4com
0
1.4k
攻撃と防御で実践するプロダクトセキュリティ演習~導入パート~
recruitengineers
PRO
2
200
モバイルアプリ研修
recruitengineers
PRO
3
260
開発と脆弱性と脆弱性診断についての話
su3158
1
1.1k
AIとTDDによるNext.js「隙間ツール」開発の実践
makotot
6
700
実践アプリケーション設計 ②トランザクションスクリプトへの対応
recruitengineers
PRO
3
220
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
338
57k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
480
Statistics for Hackers
jakevdp
799
220k
Bash Introduction
62gerente
614
210k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
How to Think Like a Performance Engineer
csswizardry
25
1.8k
Unsuck your backbone
ammeep
671
58k
[RailsConf 2023] Rails as a piece of cake
palkan
56
5.8k
How to train your dragon (web standard)
notwaldorf
96
6.2k
Embracing the Ebb and Flow
colly
87
4.8k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Transcript
© 2024 Loglass Inc. 1 © 2024 Loglass Inc. OOM発生時のトラブル
シューティング Profilerを活用できる か調査してみた 宮本 淳志 2024.11.20
© 2024 Loglass Inc. 2 自己紹介 自動車整備士としてキャリアをスタートし、退職後カナダのバンクーバーへ渡航。その後、プログラミン グを現地の学校で勉強した後に、機械学習エンジニアとして現地のスタートアップでエンジニアとして のキャリアをスタートさせる。 2年半カナダに滞在したのち、福岡へ移住。
福岡の受託開発会社でバックエンドエンジニアとして3年ほど勤務。バックエンド・フロント・インフラの 経験を積む。 2024年10月に株式会社ログラスへクラウドエンジニアとして入社。 株式会社ログラス クラウドエンジニア 宮本 淳志 Atsushi Miyamoto
© 2024 Loglass Inc. 3
© 2024 Loglass Inc. 4 Loglassについて
© 2024 Loglass Inc. 5 Loglassについて
© 2024 Loglass Inc. 6 今日話すこと 1. OOM (OutOfMemoryError)の理解と事例 2.
Datadogによる監視 3. Datadog Profilerの調査と考察 4. 現在の取り組みと今後やっていきたいこと Agenda
© 2024 Loglass Inc. 7 01 OOMの理解と事例
© 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などのサードパーティのライブラリで使用される
© 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...
© 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
© 2024 Loglass Inc. 11 02 Datadogによる監視
© 2024 Loglass Inc. 12 02|Datadogによる監視 現状のアーキテクチャ • ECS on
Fargate サイドカーとしてDatadog AgentとFluentBitが稼働 アプリケーションログやコンテナのメトリクスを監視・取得しDatadogへ集約
© 2024 Loglass Inc. 13 02|Datadogによる監視 Slackへアラート通知
© 2024 Loglass Inc. 14 02|Datadogによる監視 OOM発生時ヒープダンプみたい!!
© 2024 Loglass Inc. 15 03 Datadog Profilerの調査と考察
© 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
© 2024 Loglass Inc. 17 03|Datadog profilerの調査と考察 実際に確認してみた
© 2024 Loglass Inc. 18 03|Datadog profilerの調査と考察 あれ.. タイミングによってはOOMが発生した直前のデータは取れてないか も..?
© 2024 Loglass Inc. 19 03|Datadog profilerの調査と考察 考察 プロファイルのデータの収集間隔は60秒 Datadogにデータが渡る前にコンテナが停止して、データが送れ
ていないのかも??
© 2024 Loglass Inc. 20 04 現在の取り組みと今後やっていきたこと
© 2024 Loglass Inc. 21 04|現在の取り組みと今後やっていきたいこと S3に直接heapdumpをアップロード -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heap_dump.hprof -XX:OnOutOfMemoryError=/dump.sh
起動オプションを設定し OOM発生時にS3へアップロードする仕組み
© 2024 Loglass Inc. 22 04|現在の取り組みと今後やっていきたいこと 断念した理由 • ダンプ開始からS3にアップロード完了するまでの時間が長い(5min 〜
10min) • これによりALBのヘルスチェックに引っかかり、ダンプ完了するのを待たずにコンテナが停止して しまう
© 2024 Loglass Inc. 23 04|現在の取り組みと今後やっていきたいこと 今後 • Datadog Profiler使っていく
• 開発者側へDatadogの使い方を伝授
© 2024 Loglass Inc. 24