# ソフトウェアエイジング
## 定義
ソフトウェアエイジング(software aging)は、長時間稼働するソフトウェアにおいて内部状態の累積(メモリリーク・ファイルディスクリプタ枯渇・ガベージコレクション不全・ロック競合の蓄積など)が時間とともに進行し、性能劣化や failure 発生率の上昇として観測される現象である。概念は Parnas 1994(ICSE)で形式化された([[A Survey of Online Failure Prediction Methods]] §5.2 で参照)。
[[A Survey of Online Failure Prediction Methods]] のフレームでは、エイジングは「undetected error が時間とともに symptom として side effect を出す」典型ケースであり、symptom monitoring(系統 2)による予測の主要応用領域である(§2.1 のメモリリーク例、§5.2 全般)。具体的な観測対象は、free physical memory・swap 使用量・file table size・process table size・kernel memory・system cache resident bytes など。
対策は **ソフトウェア若返り**(software rejuvenation)と呼ばれ、IBM xSeries Software Rejuvenation Agent が業界実装の代表([[A Survey of Online Failure Prediction Methods]] §5.2.4.1, Castelli+ 2001)。Grottke & Trivedi 2007 は「aging-related errors」という用語で本領域を AVI(aging, vulnerability, intermittent)障害類の一つとして整理する(本論文 §2.1 で言及)。
## 横断的知見
- **エイジングは「予測対象として最適な特徴を持つ障害クラス」**: Salfner+ 2010 の taxonomy で言えば「予兆あり・連続変数で観測可能・トレンドが滑らか・予測アルゴリズムが豊富(回帰・時系列分析・関数近似が全て使える)」という条件が揃う(§5.2.1〜§5.2.4 を通読すると、エイジング系の応用が最も手法選択の幅広い領域)。これは突発的なハードウェア故障や設定変更起因の障害とは対照的で、サーベイ([[A Survey of AIOps in the Era of Large Language Models]] §4.1)が「precursor のない障害が多く予測は false negative が高い」と述べる懸念をエイジング系では緩和できる。(Source: [[A Survey of Online Failure Prediction Methods]] §5.2, [[A Survey of AIOps in the Era of Large Language Models]] §4.1)
- **エイジング検知の代表手法系譜は本論文の symptom monitoring 系の縮図**: Vaidyanathan & Trivedi 1999(2.1.1, semi-Markov reward model)、Garg+ 1998(2.4.1, robust regression + seasonal Kendall test)、Castelli+ 2001(2.4.1, curve fitting、IBM 実装)、Crowell+ 2002 / Shereshevsky+ 2003(2.4.2, Hölder 指数 + Shewhart 変化点検知)、Singer+ 1997 / Gross+ 2002 / Cassidy+ 2002(2.3.5, MSET + SPRT)が並ぶ。同じドメインの 1 問題を、function approximation(2.1)・system models(2.3)・time series analysis(2.4)の異なる principal approach で攻める実例集として読める。(Source: [[A Survey of Online Failure Prediction Methods]] §5.2)
- **予測(prediction)による対処と、アーキテクチャによる予防(prevention)は、ソフトウェアエイジング問題への独立した2つの解法軸である**: Salfner+ 2010 が整理する symptom monitoring 系の手法群(§5.2)は、エイジングを「時間とともに進行する現象」として受け入れたうえで、その症状(メモリリーク・ファイルディスクリプタ枯渇等)を監視し資源枯渇時刻を予測して事前に若返り(rejuvenation)を実行する、という**予測ベースの対処**を核とする。[[@2021__OReillyJapan__SREの探求 - Chapter 24 イミュータブルなインフラストラクチャとSRE]] §24.5 が描くイミュータブルなインフラストラクチャは、これとは全く異なる解法を取る——インスタンスのライフサイクル全体で設定が唯一つのみであることを保証し、「数週間より長く実行することはなく、最適な状態としては数日未満」というインスタンス寿命の上限そのものを短く保つことで、エイジングが観測可能な水準まで進行する前に必ずインスタンスを交換する。前者はエイジングの進行を許容したうえで予測技術を洗練させる方向、後者はエイジングが進行する時間的猶予自体をなくす方向であり、「症状を監視して先回りする」対「症状が現れる前に土台ごと入れ替える」という、根本的に異なる2つの対処戦略が独立に存在することを示す。(Source: [[A Survey of Online Failure Prediction Methods]] §5.2, [[@2021__OReillyJapan__SREの探求 - Chapter 24 イミュータブルなインフラストラクチャとSRE]] §24.5)
- **ch.24 は「エイジング」という語を使わずに、セキュリティとSREの双方の懸念としてエイジングの帰結を独立に再発見している**: ch.24 §24.5 は、長期間稼働するマシンの「真の状態が本当には分からない」状態を、Salfner+ 2010 が定義する aging-related errors の語彙とは無関係に、セキュリティ観点(不正アクセス・永続的なマルウェアの見落とし)と SRE 観点(未パッチのバグ・エージェントのクラッシュによる更新漏れ)の双方から独立に問題視する。両ソースを突き合わせると、学術的な「ソフトウェアエイジング」研究(内部状態の累積による性能劣化・failure率上昇)と実務者が語る「既知の状態の喪失」は、同じ根本現象(長時間稼働による状態の不透明化)の異なる切り口——前者は性能・可用性の劣化として、後者はセキュリティ・保守性の劣化として——であることが分かる。(Source: [[A Survey of Online Failure Prediction Methods]] §2.1, [[@2021__OReillyJapan__SREの探求 - Chapter 24 イミュータブルなインフラストラクチャとSRE]] §24.5)
## 未解決の問い
- LLM 推論サーバや継続学習されるモデルにおける「モデルの劣化」(精度ドリフト・catastrophic forgetting・KV キャッシュ肥大化など)はソフトウェアエイジングの一形態として捉えるべきか、それとも別の障害クラスとすべきか。([[ディペンダビリティ]] §未解決の問いと連動)
- エイジング指標(memory leak rate・GC pause 増加・file descriptor 増加など)は伝統的に「単一プロセスの状態」だが、Kubernetes・サーバーレスのようにエフェメラルなプロセス管理が標準化された 2020 年代ではプロセスは数分〜数時間で再生成される。エイジングを予測する意味が縮退する代わりに、レイヤーは「ノード」「クラスタ」「ネットワーク」に上がっているはず。本論文の symptom monitoring 系手法をクラスタレベルに移植するための条件は何か。
- Salfner+ 2010 §5.2.4.1 が紹介する Cheng+ 2005 の "health index ∈ [0,1] + 線形外挿で資源枯渇時刻を推定" という 2 段構成は、現代の SRE ダッシュボード(`burn rate`・`exhaustion ETA`)と機能的に同型に見える。SLO ベース運用での error budget burn rate アラート([[エラーバジェット]])は、本質的に「failure prediction の time-to-resource-exhaustion 推定」を SLO 軸でやり直したものではないか。
- 「インスタンス寿命を短く保つ」というイミュータブルなインフラストラクチャの予防戦略は、症状監視ベースの予測手法と比べてどの程度のコスト差(イメージ再ビルド・再デプロイの頻度に伴うオーバーヘッド)を伴うか。両者を定量比較したソースはまだない。エイジングが進行しにくい(数日〜数週間でエイジング症状がほぼ出ない)ワークロードでは、監視ベースの予測が依然として有効な代替になりうるか。
## 関連
- 上位 concept: [[障害予測]] / [[プロアクティブ障害管理]] / [[ディペンダビリティ]]
- ソース: [[A Survey of Online Failure Prediction Methods]](§2.1, §5.2 全般) / [[@2021__OReillyJapan__SREの探求 - Chapter 24 イミュータブルなインフラストラクチャとSRE]](§24.5)
- 関連 entity: [[Felix Salfner]] / [[Miroslaw Malek]] / [[Jonah Horowitz]]
- 関連概念: [[イミュータブルインフラストラクチャ]](予測でなく交換によるエイジングの予防)
## 出典
- [[A Survey of Online Failure Prediction Methods]] §2.1(メモリリークの fault/error/symptom/failure 進展例)・§5.2(symptom monitoring 系の代表手法群でエイジング応用が多数を占める)
- Jonah Horowitz, 「24章 イミュータブルなインフラストラクチャと SRE」, David N. Blank-Edelman(編)『SREの探求』, オライリー・ジャパン, 2021, §24.5.