htop
とによると、free
現在見ているコンピュータのRAM容量は6631/11907MBです。これは利用可能なRAMの約半分です。ところがMEM%基準でソートしてみると、最も多く使われるtop
メモリhtop
はMEMが0.8%のXorgだ。 gnome-settings
0.3%を使用し、他の何人かは0.1%を使用します。この割合を合わせると50%未満になります。
何がメモリの約50%を使用しているのか、どうやってtop / htopにこのメモリ使用量が表示されないのですか?
出力free -mt
:
total used free shared buffers cached
Mem: 11907 10660 1246 0 650 3379
-/+ buffers/cache: 6629 5277
Swap: 3999 26 3973
Total: 15907 10686 5220
編集する:要望通り…
仮想マシン統計 1 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 26640 312180 695976 4229988 0 0 4 34 0 1 1 1 96 2 0
0 0 26640 312032 695976 4230016 0 0 0 0 157 191 0 0 100 0 0
0 0 26640 312156 695976 4230016 0 0 0 0 158 270 0 0 100 0 0
0 0 26640 312156 695976 4230016 0 0 0 0 128 189 0 0 100 0 0
0 0 26640 312156 695976 4230016 0 0 0 0 212 308 0 0 100 0 0
猫/proc/meminfo
MemTotal: 12192876 kB
MemFree: 311644 kB
Buffers: 695984 kB
Cached: 4230016 kB
SwapCached: 7684 kB
Active: 1378792 kB
Inactive: 3656424 kB
Active(anon): 2192 kB
Inactive(anon): 108500 kB
Active(file): 1376600 kB
Inactive(file): 3547924 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 4095992 kB
SwapFree: 4069352 kB
Dirty: 28 kB
Writeback: 0 kB
AnonPages: 102412 kB
Mapped: 52116 kB
Shmem: 1456 kB
Slab: 5584084 kB
SReclaimable: 4402760 kB
SUnreclaim: 1181324 kB
KernelStack: 3176 kB
PageTables: 17852 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 10192428 kB
Committed_AS: 678004 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 185496 kB
VmallocChunk: 34359540220 kB
HardwareCorrupted: 0 kB
AnonHugePages: 28672 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 5177316 kB
DirectMap2M: 7403520 kB
DirectMap1G: 0 kB
答え1
問題は、複数のプロセス間で共有されるため、多くのユーティリティで考慮されていない共有メモリが原因で発生する可能性があります。smemstat
ユーティリティ(「共有メモリの比例メモリ使用量の報告」)を使用してこれを確認できます。
編集:カーネルはメモリの大部分を占めることができます(出力used
値に含まれていますfree
)。内容を見てください/proc/meminfo
。 ~によるとLinuxで「失われた」メモリ使用量を追跡する、Slab + Shmem + KernelStack + PageTablesはカーネル空間を提供します。一般的に、Slabはかなり重要なようです。
他のユーザーにも同様の問題があります。
答え2
この違いには2つの可能な説明があります。
- あなたは仮想マシンにあり、共有メモリを持っています。
- あなたはたくさん持っています。たくさんプロセスは非常に少量のメモリを消費しますが、集約されるとはるかに多くのメモリを消費します。
最初は決定しやすく、2番目も同じです。しかし、注意すべき点は、RAMを使用する複数のプロセスを見つける必要があることです。 PS、uniq、sortが役に立ちます。
➜ ~ ps axco command | uniq -c | sort -nr | head
2 xdg-open <defunct>
2 mplayer
1 zsh
1 zsh
1 zsh
1 x-session-manag
1 xprop
1 Xorg
1 writeback
1 watchdog/0
これにより、悪意のあるプロセスが自分自身を呼び出してメモリを使用していることを確認できます。
答え3
すでに自由命令で答えを得ているので、
free -m
-/+ buffers/cache: 6629 5277
これは必要な行なので、この値は使用された物理メモリーなので、実際に使用可能なメモリーは5277なので表示できtop
ません。htop
空の最初のフィールド:
total used free shared buffers cached
Mem: 11907 10660 1246 0 650 3379
実際にはオペレーティングシステム(カーネル)によって予約されており、バッファなしで実際に使用されていないメモリを表示し、より多くのvmstat
情報とmdb -k
モジュールを確認してカーネルが使用しているメモリを確認し、命令の値を使用して計算できますfree
。
すでに指摘したように、メモリはカーネルによって予約(キャッシュ)され、一部のアプリケーションが要求するまでそのまま残ります。そのため、どのプロセスがそれを使用しているかを判断することはできません。
出力を提供し、cat /proc/meminfo
キャッシュフィールドを提供します。これが実際にカーネルが使用するものです!
答え4
1246MBの完全に利用可能なメモリがありますが、表示される5277MBには「キャッシュ」メモリはありません。これは、オペレーティングシステムが速度を上げるためにメモリに何かを入れたことを意味します。 「中古」と呼ばれますが(つまり、「無料」の電話番号は1246です)、必要に応じて実際に使用できます。
この回答をご覧ください。`free`:出力フォーマット