スワップは、非アクティブなRAMページが実際にアクティブであるときに発生したようです。
(更新:コメントで明確にされたように、これはあなたのケースではありません。したがって、同じ問題を抱えている人は、水平ルールに進むことができます。)
つまり、多くのプログラムが実行されていて、カーネルがいくつかのページをスワップアウトしました。その後、いくつかのプログラムを終了しました。カーネルは、RAMページを非アクティブとしてマークします。しかし、これらのページが必要になるまで、ページをスワップインしてRAMに戻すことはありません。これにより、非アクティブなページとスワップアウトされたページの両方が作成されます。
先制的にページをスワップインしないのはなぜですか?それはオッズに賭けているからです。長期的には負けです。簡単な例を考えてみましょう:同時にRAMに収まらない2つのプログラムAとB。プログラムAはまだ実行中で、スワップアウトされたページはすべてAに属します。プログラムBは終了し、非アクティブなページはすべてBに属します。
カーネルがAのページをプリエンプティブにスワップインし、その後すぐにスワップインする場合:
- プログラムAはそのページにアクセスする必要があります->あなたが勝ちます-ページは既にRAMにあります。
- Bをもう一度起動する->失う-ページをRAMに持ち込むためのコストを「支払った」ため、それらを送り返す必要があります。
- 別のプログラムCを起動します-> AとCが同時にRAMに収まらないと失われます。それらが適合する場合、あなたは均一です。
また、スワップアウト(ディスクへの書き込み)はスワップイン(ディスクからの読み取り)よりも費用がかかることを考慮してください。これにより、この「ベット」はさらに魅力のないものになります。
要するに:あなたのカーネルを信頼し、それをだまそうとしないでください。
更新:アクティビティモニターを使用してシステムメモリの記事を読む
と、非アクティブなメモリは機能しないことが判明しました。非アクティブなメモリに関する記事で指定されている定義は正しいです。
この情報はRAMにありますが、積極的には使用されていません。最近使用されました。
しかし、次の例は完全に誤解を招きやすくなりすぎています(率直に言って私の例のように)。
たとえば、Mailを使用してから終了した場合、Mailが使用していたRAMは非アクティブなメモリとしてマークされます。非アクティブメモリは、空きメモリと同様に、別のアプリケーションで使用できます。ただし、別のアプリケーションで非アクティブメモリが使用される前にメールを開くと、その非アクティブメモリが低速のドライブから読み込まれるのではなく、アクティブメモリに変換されるため、メールが速く開きます。
さらに多くのオンラインリソースを検索した結果、darwinカーネルメーリングリストでこのスレッドが見つかりました。これは非常に有益です。ジムマギーを引用(ダーウィンチームから-私は思う):
要するに、カーネルVMシステムは、使用中のページを介してメモリプレッシャースキャンを処理し、アクティブマーキングと非アクティブマーキングのバランスを維持しようとします。非アクティブのページは、非アクティブとしてマークされている間、再利用のためにスキャンされます。それらが再利用されている場合、それらはアクティブとしてマークされ、他のページがアクティブから非アクティブ状態に移動して、アクティブに使用されているかどうかを検出する必要があります。したがって、非アクティブは誤った呼び名です。「おそらくアクティブではないので、それを確認してみてください」の略です。
あなたが発見したように、私たちが(現在)努力している内部バランスは、約2/3アクティブ対1/3非アクティブです...
これは、観察する動作を説明しています。つまり、表示される非アクティブなページは、最近使用されていない実行中のプログラムに属します。したがって、新しいプログラムを起動すると、非アクティブなページがスワップアウトされます。同時に、他のプログラムのページは非アクティブとしてマークされ、アクティブと非アクティブの2/1の比率が維持されます。
スレッドはまた、ダーウィンの内部についての詳細を学ぶためにいくつかの提案が含まれています。また、ビーチボールの問題のためにメモリ使用量の調査を開始した場合のいくつかの提案もあります(通常はほとんど関係ありません)。
結論は変わりません。カーネルを信頼し、それをだまそうとしないでください。:-)