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
530
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
380
Asynqを使って、サクッと非同期処理を実現する
atsushii
0
210
LangChainとSupabaseを活用して、RAGを実装してみた
atsushii
1
610
Checkpointerを介して、DynamoDBに状態を保存してみた
atsushii
1
170
Other Decks in Technology
See All in Technology
Amazon Q Developer for GitHubとAmplify Hosting でサクッとデジタル名刺を作ってみた
kmiya84377
0
3.4k
Data Hubグループ 紹介資料
sansan33
PRO
0
1.8k
生成AIをテストプロセスに活用し"よう"としている話 #jasstnano
makky_tyuyan
0
150
比起獨自升級 我更喜歡 DevOps 文化 <3
line_developers_tw
PRO
0
150
堅牢な認証基盤の実現 TypeScriptで代数的データ型を活用する
kakehashi
PRO
2
220
AWS全冠したので振りかえってみる
tajimon
0
140
Grafana MCP serverでなんかし隊 / Try Grafana MCP server
kohbis
0
340
AIエージェントの継続的改善のためオブザーバビリティ
pharma_x_tech
6
1.1k
エンジニア採用から始まる技術広報と組織づくり/202506lt
nishiuma
8
1.7k
AIにどこまで任せる?実務で使える(かもしれない)AIエージェント設計の考え方
har1101
3
1k
Nonaka Sensei
kawaguti
PRO
3
650
新規プロダクト開発、AIでどう変わった? #デザインエンジニアMeetup
bengo4com
0
450
Featured
See All Featured
Navigating Team Friction
lara
186
15k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
How GitHub (no longer) Works
holman
314
140k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
16
920
YesSQL, Process and Tooling at Scale
rocio
172
14k
Code Review Best Practice
trishagee
68
18k
Why Our Code Smells
bkeepers
PRO
337
57k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Unsuck your backbone
ammeep
671
58k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
60k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
900
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