free -mhの説明を次のように見ました。
free は、カーネルで使用されるバッファとキャッシュだけでなく、システムで使用可能な物理メモリとスワップメモリの合計量も表示します。 /proc/meminfo を解析して情報を収集します。表示される列は次のとおりです。
total Total installed memory (MemTotal and SwapTotal in /proc/meminfo) used Used memory (calculated as total - free - buffers - cache) free Unused memory (MemFree and SwapFree in /proc/meminfo) shared Memory used (mostly) by tmpfs (Shmem in /proc/meminfo) buffers Memory used by kernel buffers (Buffers in /proc/meminfo) cache Memory used by the page cache and slabs (Cached and SReclaimable in /proc/meminfo) buff/cache Sum of buffers and cache available Estimation of how much memory is available for starting new applications, without swapping. Unlike the data provided by the cache or free fields, this field takes into account page cache and also that not all reclaimable memory slabs will be reclaimed due to items being in use (MemAvailable in /proc/meminfo, available on kernels 3.14, emulated on kernels 2.6.27+, otherwise the same as free)
場合によっては、バッファ/キャッシュメモリに空きメモリが割り当てられることがあります。メモリ使用率が高い場合や、使用可能なメモリが非常に低い場合、「top」を使用すると、プロセスが大量のメモリを占有していることがわかります。
しかし、「空きメモリ」が十分なときに、「空きメモリ」のどれが「バッファ/キャッシュ」に割り当てられているかをどうやって知ることができますか?どのプロセスに保存されたかを確認する方法はありますか?
root@server_test:~# free -mh
total used free shared buff/cache available
Mem: 29G 24G 359M 398M 4.2G 3.5G
Swap: 0B 0B 0B
ありがとう、台東
答え1
私が理解しているように、「アイドル」とマークされているバッファ/キャッシュはメモリを必要とせず、非常に大きな数になる可能性があります。所定の位置にあるどのプロセスにも。したがって、この場合、topまたはpsに見られるように、プロセスに割り当てられたメモリはあまりありません。
つまり、バフ/キャッシュをファイルシステムキャッシュとして使用できます。ファイル(またはファイルの一部)をディスクから読み取ると(ゆっくり)、データはメモリキャッシュに保存されます(高速)。私はOSカーネルがデータをキャッシュに保存させたプロセスを追跡しないと思います。
たとえば、この理論をテストするためにバフ/キャッシュ(またはほとんど)を空にしてから、プロセス(catなど)に非常に大きなファイルを読み取ることができます。プロセス(cat)がファイルの読み取りを終了すると終了し、プロセスはもう存在しません。ただし、おおよその読み込んでいるファイルのサイズと同じくらいバフ/キャッシュ値が増加したことを確認できます。したがって、この場合、catプロセスはそのデータをキャッシュに追加しますが、catプロセスは現在のデータが(一時的に)存在するメモリのキャッシュページを「所有」しません。
答え2
問題のプログラムが独自の制御グループで実行されている場合は、おそらく次のものを使用できます。
cd /sys/fs/cgroup
find -name memory.stat -exec grep -HE '^(file|cache) ' | sort -nk 2
キャッシュされた各ページは1つのcgroupだけを占めると確信しています。複数のcgroupが同じページキャッシュを使用している場合も同様です。