私はtmpfsについて読んで、その利点が気になりました。だからディレクトリを作成し、tmpfsとしてマウントしました。
したがって、理論的にはtmpfsに書き込まれたすべての内容はRAMに直接保存され、再起動するまで続きます。だからtmpfsドライブに10GBのファイルを作成しました。理論によると、htop / topコマンドは10 GB以上のRAM消費量を表示する必要があります。 256GBのRAMがありますが、RAM消費量はtmpfsから10GBファイルを作成する前と同じです。
私が逃したものはありますか?
答え1
Braatchleyがすでに指摘したように、htopは他の人と同様に+-キャッシュラインを自由に見ることができるようです。 3.14より前のカーネルバージョンを使用している場合は、実際には変更されません。最新のカーネルを持っていても、freeとhtopは正しい値を得るためにどこを見つけるべきかを知るのに十分賢くなければなりません。
何が起こっているのかをより深く理解するには、/proc/meminfoを見て、以前のシステムで無料で提供されているものと比較してください。
root@localhost:/media/user# free
total used free shared buffers cached
Mem: 291152 268264 22888 0 0 47180
-/+ buffers/cache: 221084 **70068**
Swap: 0 0 0
root@localhost:/media/user# cat /proc/meminfo
MemTotal: 291152 kB
MemFree: **22904** kB
Buffers: 0 kB
Cached: **47144** kB
SwapCached: 0 kB
Active: 154752 kB
Inactive: 32376 kB
Active(anon): 143632 kB
Inactive(anon): 21936 kB
Active(file): 11120 kB
Inactive(file): 10440 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 139996 kB
Mapped: 25276 kB
Shmem: **25584** kB
Slab: 64096 kB
SReclaimable: 3364 kB
SUnreclaim: 60732 kB
KernelStack: 2280 kB
PageTables: 3588 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 145576 kB
Committed_AS: 1500824 kB
VmallocTotal: 499712 kB
VmallocUsed: 7256 kB
VmallocChunk: 449196 kB
tmpfsはshmemの下に含まれていますが、「cache」セクションにも追加されます。以前のLinux(カーネル+ procps)では、これは「使用可能な」メモリを決定するために使用されていましたが、ほとんどのユーザーはキャッシュメモリをすぐに回復可能として扱うため、これは非常に問題になります。 tmpfsではもうそうではありません。
最近のシステム(カーネル> = 3.14)では、/proc/meminfoに新しいものがあります。
MemAvailable: xxxx kB
これはこれらすべての要素を考慮し、htopとfreeがこの値に依存する限り正確な表現を得ることができます。私のDebian 8システムでは、カーネルはMemAvailableを認識していますが、そうではありません。
ardi@oab1ardi-mcdev:~/mc/oattest1/workspace/bcm_linux_3_4rt$ cat /proc/meminfo | grep Avail
MemAvailable: **1319148** kB
ardi@oab1ardi-mcdev:~/$ free
total used free shared buffers cached
Mem: 2058360 1676332 382028 33116 40356 933916
-/+ buffers/cache: 702060 **1356300**
Swap: 0 0 0
ardi@oab1ardi-mcdev:~/$ sudo dd if=/dev/zero bs=1M count=200 of=/run/delme
200+0 records in
200+0 records out
209715200 bytes (210 MB) copied, 0.0628098 s, 3.3 GB/s
ardi@oab1ardi-mcdev:~/$ free
total used free shared buffers cached
Mem: 2058360 1881060 177300 237916 40372 1138720
-/+ buffers/cache: 701968 **1356392**
Swap: 0 0 0
ardi@oab1ardi-mcdev:~/mc/oattest1/workspace/bcm_linux_3_4rt$ cat /proc/meminfo | grep Avail
MemAvailable: **1114152 kB**
最後の注意:
実際、tmpfsは非常に危険です。他の種類のメモリ使用量とは異なり、tmpfsファイルはOOM Killerでクリーンアップできず、実際にどのプロセスがtmpfsファイルを生成したかについての記録はありません。したがって、Debian 8が/ tmp(すべてのプロセスに書き込むことができます)でtmpfsを使用しないことを選択したのはなぜですか?
次のリンクのクレジット: https://linuxraj.wordpress.com/2015/03/10/memory-utilization-from-procmeminfo-memavailable/ https://rwmj.wordpress.com/2012/09/12/tmpfs-considered-harmful/