topの出力には、メモリとスワップの使用行に「buff / cache」と「avail Mem」とマークされた2つのフィールドがあります。
これら2つのフィールドの意味は何ですか?
私はそれらをグーグルで試しましたが、結果は一般的な記事のみを表示し、これらのフィールドが何を意味するのかを説明していません。
topの出力には、メモリとスワップの使用行に「buff / cache」と「avail Mem」とマークされた2つのフィールドがあります。
これら2つのフィールドの意味は何ですか?
私はそれらをグーグルで試しましたが、結果は一般的な記事のみを表示し、これらのフィールドが何を意味するのかを説明していません。
回答:
top
manページには、フィールドを説明していませんが、free
「sが行います。
バッファ
カーネルバッファが使用するメモリ(
Buffers
中/proc/meminfo
)キャッシュ
ページキャッシュと(スラブが使用するメモリ
Cached
とSReclaimable
で/proc/meminfo
)バフ/キャッシュ
バッファーとキャッシュの合計
利用可能
スワップなしで、新しいアプリケーションを開始するために使用可能なメモリの量の推定。キャッシュまたはフリーフィールドによって提供されたデータとは異なり、このフィールドはありません、すべての再生可能メモリスラブ(原因使用中のアイテムに再利用されることもアカウントページキャッシュに取り、
MemAvailable
中/proc/meminfo
のカーネル上でエミュレートカーネル3.14、上で利用できる、2.6.27+ 、それ以外はfreeと同じ)
基本的に、「バフ/キャッシュ」は、ディスク上にある、またはすぐにそこに到達するデータに使用されるメモリをカウントし、結果として潜在的に使用可能です(キャッシュの場合、対応するメモリをすぐに使用可能にするか、十分な時間を与えると、バッファの場合—後者はとにかく小さいままであることになっています); 「使用可能」とは、スワッピングを発生させずに割り当ておよび使用できるメモリ量を測定します(詳細については、「使用可能なメモリ量をディストリビューション間で移植可能にする方法」を参照してください)。
少しだけ明確にするために、バッファとは、書き込まれているデータを指します。そのメモリは、書き込みが完了するまで再生できません。
キャッシュとは、読み取られたデータを指します。再び読み取る必要がある場合に備えて保持されますが、ディスクからいつでも再読み取りできるため、すぐに再利用できます。
/proc/meminfo
フィールドがありWriteback
ます。そこ別々のフィールドがありBuffers
、それはとして示されているものであるbuffers
の中でfree -w
。Buffers
メモリ使用の一般的な理由は次のとおりです。「RAMの30%が「バッファ」です。それは何ですか?」
Buffers
(現在)ページキャッシュの一部です。それはカウントされませんCached
が、それはの一部としてカウントされActive(file) + Inactive(file)
ます。スティーブン・キットの答えに対するコメントをご覧ください。 Dirty
は書き込まれたページキャッシュの一部であるため、最終的にはディスクに書き戻す必要があります。 Writeback
は含まれませんDirty
。したがって、Writeback
はの値の一部ではありませんBuffers
。
Buffers
実際に意味することは、ブロックデバイスに関連付けられたページのキャッシュです。一部のファイルシステムはこれを内部的に使用します。他の人はまったく使用しません。/「RAMの30%はバッファです」という質問に対する回答を修正します。
この情報の標準的なソースは /usr/src/linux/Documentation/filesystems/proc.txtです
バッファ:RAWディスクブロックの比較的一時的なストレージが極端に大きくなることはありません(20MB程度) キャッシュ:ディスクから読み取られるファイルのメモリ内キャッシュ(ページキャッシュ)。SwapCachedは含まれません。
Linux Page Cache(meminfoの「Cached:」)は、ほとんどのシステムで最大のRAM消費者です。ディスク上のファイルからread()を実行すると、そのデータはメモリに読み込まれ、ページキャッシュ(1.)に入ります。
バッファキャッシュ(meminfoの「Buffers:」)は、dentry / inodeキャッシュに近いものです。
または、このようなソースコードを分析します。
の量buffers
は、関数の戻り値ですnr_blockdev_pages(void)
long nr_blockdev_pages(void)
{
struct block_device *bdev;
long ret = 0;
spin_lock(&bdev_lock);
list_for_each_entry(bdev, &all_bdevs, bd_list) {
ret += bdev->bd_inode->i_mapping->nrpages;
}
spin_unlock(&bdev_lock);
return ret;
}
の量cached
:
global_page_state(NR_FILE_PAGES) – total_swapcache_pages – i.bufferram