web-dev-qa-db-ja.com

Linux:どのアプリケーションがRAMキャッシュを使用していますか

どのアプリケーションがRAMバッファとキャッシュを使用しているかを確認できるかどうか疑問に思っています。また、データがキャッシュからドロップされるときに、カーネルで指定された時間もあります。私のRAMはバッファとキャッシュによって完全に使用されており、スワップも食べ始めています。

Free -mの出力:

$ free -m 
             total       used       free     shared    buffers     cached
Mem:         14034      13878        156          0         10      11362
-/+ buffers/cache:       2505      11528
Swap:         8187        478       7709
5
Deven

いいえ、スワップは食べません。ブロックキャッシュとしてのみ機能します。ほとんどのキャッシュ、キャッシュはスワップに出られませんが、このルールにもいくつかの例外があります。たとえば、低速のハードディスクを高速のSSDにキャッシュするのは良いことかもしれません。

しかし、あなたの場合、状況ははるかに単純です。Linux(およびその他のOS)は、ハードディスクのキャッシュに空きRAMのすべて(またはほぼすべて)を使用します。そして、いいえ、それは問題ではありません。新しいメモリページが必要な場合、読み取りキャッシュページをいつでも解放できるからです。また、可能な限り多くのブロックキャッシュを使用すると、平均ファイル操作速度が向上します。

実際、システムのreal空きメモリを知りたい場合は、「バッファ」と「キャッシュ」を空きであるかのように計算する必要があります。

「無料」のタイトルで読むことができるのは、実際には(ほとんどの場合非常に最小限の)メモリサイズであり、キャッシュにも使用されません(使用できませんでした)。それは問題ではありません、そしてあなたのシステムが遅いならば、それはそれのためではありません。


スワップ使用の原因:カーネルのように見える一部のメモリブロック非常に未使用で、完全にスワップアウトできます。これらは特に異なるデーモンのメモリ領域であり、RAMにとどまり、何もしません。それらは何にも使用されていないため、メモリを交換することは問題ではありませんが、キャッシュに現在解放されているRAMページを使用するとシステムをより高速にすることができます


どのプロセスがキャッシュを使用しますか?実際に見つけるのは難しく、事実上不可能です。ブロックキャッシュはプロセスによって満たされるのではなく、ディスク読み取り操作によって満たされます。ディスクブロックが現在キャッシュにある場合(つまり、このブロックを再度読み取る場合、ハードディスクを待つ必要はありません)、誰かこのブロックを読み取るが、登録されていないことを意味します。プロセスはそれでした。このデータを知りたい場合は、ディスクの読み取り使用量を監視する必要があります。

このためのツールがあり、その名前はblkmonです。ブロックデバイスの読み取り(および書き込み)操作を監視することができます。グーグルはあなたの友達です(または、ここまたはunix SEでも次の質問を待っています)。