スラッシング

スラッシングは、仮想記憶システムを採用しているオペレーティングシステム(OS)において、プロセスの実行に必要なページが主記憶装置(RAM)に収まりきらず、ページインとページアウト(スワッピング)の処理が過度に頻繁に繰り返されることで、システム性能が著しく低下する現象のことであり、CPUが実処理よりもディスクアクセス(I/O)の待機に費やす時間の割合が支配的となり、システムの応答性が極端に悪化し、結果として全体の処理能力が飽和してしまう、メモリ管理上の深刻な問題のことです。

スラッシングの概要と発生のメカニズム

スラッシング(Thrashing)は、システムの設計上、あるいは過度な要求によって、物理メモリ(RAM)が不足し、仮想記憶の機能が過剰に働くことによって引き起こされます。

1. 仮想記憶とページング

仮想記憶は、RAM容量以上のプログラムを実行するために、RAMをページという固定サイズの単位で管理し、RAMと二次記憶装置(ハードディスクやSSD)の間でデータの入れ替え(ページング)を行う仕組みです。

  • ページフォールト(Page Fault): プログラムがアクセスしようとしたデータ(ページ)が現在RAM上にない場合に発生し、OSはディスクからそのページをRAMに読み込む(ページイン)処理を行います。

2. スラッシングの原因

スラッシングは、以下の条件が重なった結果として発生します。

  1. 多すぎるプロセス: OSが同時に実行しようとするプロセスやプログラムの数が多すぎる。
  2. 局所性の欠如: 各プロセスがランダムなメモリ位置にアクセスしようとする(プログラムの局所性が低い)。
  3. 総ワーキングセットの超過: 実行中の全てのプロセスが必要とするRAMの総量(ワーキングセットの合計)が、物理的なRAM容量を恒常的に上回っている。

これらの状況下では、あるプロセスがページインを要求するたびに、OSは別の重要なページをRAMから追い出し(ページアウト)、その直後に追い出されたページが別のプロセスからすぐに要求されるという悪循環に陥ります。

3. 結果

CPUの処理時間の大部分が、ディスクとのデータのやり取り(I/O待ち)に費やされてしまい、本来の計算処理がほとんど進まなくなります。これにより、CPU利用率は見かけ上高くても、実質的なスループット(単位時間あたりの処理量)は劇的に低下します。

スラッシングへの対処法と予防策

スラッシングは一度発生するとシステム全体に深刻な影響を与えるため、これを防ぐことがメモリ管理において最重要課題の一つとなります。

1. ワーキングセットの管理

スラッシングを防ぐ基本的なアプローチは、すべての実行中プロセスが必要とするメモリの総量(ワーキングセットの合計)が、RAM容量を超えないように制御することです。

  • プロセス数の制限: 同時にRAM上で実行を許可するプロセスの数を制限し、メモリ競合を緩和します(多重度制御)。
  • ページフォールト率の監視: プロセスごとのページフォールト発生率を監視し、その率が異常に高いプロセスに対しては、一時的に実行を中断したり、より多くのRAMを割り当てたりします。

2. 物理メモリの増強

最も確実かつ直接的な解決策は、物理的なRAM容量を増設し、実行中のワーキングセットの合計を余裕をもって収容できるようにすることです。これにより、ページングの頻度を根本的に減らすことができます。

3. 局所性に着目したページ置換アルゴリズム

スラッシングの影響を緩和するため、OSはより洗練されたページ置換アルゴリズムを採用します。

  • PFF(Page Fault Frequency)アルゴリズム: ページフォールトの頻度を監視し、頻度が高すぎる場合はそのプロセスに割り当てるフレーム(RAM上のページを格納する領域)数を増やし、頻度が低すぎる場合は減らすことで、割り当ての動的な最適化を図ります。

4. アプリケーション設計の改善

スラッシングは、ハードウェアやOSの問題だけでなく、アプリケーションのメモリへのアクセスパターンが非効率的であることによっても引き起こされます。アプリケーション開発者は、データ構造の配置やアクセス順序を工夫することで、プログラムの局所性を高め、不要なページフォールトの発生を抑制することが求められます。

関連用語

アジャイル開発 | 今更聞けないIT用語集
メモリリーク | 今更聞けないIT用語集
APPSWINGBYシステム開発

お問い合わせ

システム開発・アプリ開発に関するご相談がございましたら、APPSWINGBYまでお気軽にご連絡ください。

APPSWINGBYの

ソリューション

APPSWINGBYのセキュリティサービスについて、詳しくは以下のメニューからお進みください。

システム開発

クラウドネイティブ技術とアジャイル手法を駆使し、市場投入スピード(Time-to-Market)を最大化。「進化し続けるアプリケーション」を開発します。初期リリースを最速化し、拡張性と柔軟性を備えた、ビジネスの成長に追従できるアプリケーションを開発します。

DX・AI戦略支援

「何から手を付けるべきか分からない」「AIを導入したいが、費用対効果が見えない」といった経営課題に対し、技術とビジネスの両面から解を導き出します。 絵に描いた餅で終わる戦略ではなく、エンジニアリングの実装能力に基づいた、「実現可能で、勝てる技術戦略」を策定します。


リファクタリング・リアーキテクチャ

「システムが古くて改修できない」「障害が頻発する」といった技術的負債を解消します。既存資産の徹底的な診断に基づき、コードのクリーン化(リファクタリング)や、クラウドへの移行(リアーキテクチャ)を行い、システムの寿命を延ばしコストを最適化します。