メモリ使用量ヘルスチェックコンポーネント設計
Node.js、Java、Goアプリケーションのヒープ使用量、ガベージコレクション圧力、メモリしきい値を監視するメモリ使用量ヘルスチェックコンポーネントを設計します。
Component Checks
詳細な説明
メモリ使用量ヘルスチェック
メモリヘルスチェックは、メモリリークや過剰なメモリ消費がOOM(Out-of-Memory)キルやパフォーマンス低下を引き起こす前に検出します。
レスポンスコンポーネント
{
"memory": {
"status": "UP",
"duration": "1ms",
"message": "Memory usage within limits",
"details": {
"heapUsed": "256MB",
"heapTotal": "512MB",
"rss": "580MB",
"utilization": "50%"
}
}
}
メモリしきい値
| メトリクス | 健全 | 劣化 | 異常 |
|---|---|---|---|
| ヒープ使用率 | < 75% | 75-90% | > 90% |
| RSS増加率 | 安定 | 緩やかな増加 | 急速な増加 |
| GCポーズ時間 | < 50ms | 50-200ms | > 200ms |
Livenessプローブに含める理由
メモリチェックはLivenessプローブに適した数少ない依存関係的チェックの一つです。ヒープ使用率が90%を超えるメモリリークは通常、回復に再起動が必要であり、これはLivenessプローブがトリガーするように設計されている動作です。
コンテナメモリとアプリメモリ
コンテナ化環境では、両方をチェックします:
- アプリケーションヒープ: ランタイムの管理メモリ
- コンテナ制限: Kubernetesが設定したcgroupメモリ制限
アプリがヒープの60%を使用していても、ネイティブメモリ、スレッドスタック、メモリマップファイルによりコンテナ制限の95%を使用している場合があります。
ユースケース
メモリリークが徐々にパフォーマンスを低下させる可能性がある長時間稼働のNode.js、Java、Pythonサービス。特にOOMキルがサービス可用性を中断するKubernetes環境。