Ubuntu Linux:プロセススワップメモリ​​とメモリ使用量


14

私のUbuntuは、タスクマネージャーが表示しているよりも多くのメモリを消費します。

sudo ps -e --format rss  | awk 'BEGIN{c=0} {c+=$1} END{print c/1024}'
2750.29

free -m

             total       used       free     shared    buffers     cached
Mem:          3860       2765       1094          0          3        300
-/+ buffers/cache:       2461       1398
Swap:         2729       2374        354

変だね。誰かがこの違いを説明できますか?

しかし、もっと重要なことは、プロセスが実際に使用しているメモリ量を知りたいことです。仮想メモリのサイズを知りたくはありませんが、常駐メモリとプロセスのスワップを知りたいです。

また、「ps」の形式パラメーター「sz」を出力しようとしましたが、これの合計は高すぎます(16000 MB)(パラメーター「サイズ」は36700 MBになります)。他のオプションはありますか?

私は本当にこれを使用して、どのプログラム/プロセスが多くのメモリを消費している(そしてスワップしている)かを判断し、それらを殺すために、メモリが貴重だからです:-)これは本当に意味をなさないので、ここで尋ねています。

/ proc / meminfoの出力:

MemTotal:        3952812 kB                
MemFree:         1119192 kB
Buffers:            2676 kB
Cached:           290068 kB
SwapCached:       160980 kB
Active:          1805396 kB
Inactive:         731680 kB
Active(anon):    1745820 kB
Inactive(anon):   689184 kB
Active(file):      59576 kB
Inactive(file):    42496 kB
Unevictable:         148 kB
Mlocked:             148 kB
SwapTotal:       2795272 kB
SwapFree:         390900 kB
Dirty:              1984 kB
Writeback:             0 kB
AnonPages:       2085472 kB
Mapped:            67432 kB
Shmem:            190676 kB
Slab:              88012 kB
SReclaimable:      42704 kB
SUnreclaim:        45308 kB
KernelStack:        5496 kB
PageTables:        87860 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     4771676 kB
Committed_AS:    9522364 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      374404 kB
VmallocChunk:   34359330144 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       61440 kB
DirectMap2M:     4030464 kB

「1043.84」は、「1178」からそれほど遠くないことを指摘しておく必要があります。これは、実行中の計算で得られる数値です。
CJC

unix.stackexchange(+1)で文字通り同じ質問がありました。パトリックはあまりにもあそこに私の心を吹いた:P-- unix.stackexchange.com/questions/34795/...
GoldenNewby

回答:


10

Linux仮想メモリシステムはそれほど単純ではありません。すべてのRSSフィールドを加算して、usedによって報告された値を取得することはできませんfree。これには多くの理由がありますが、私はいくつかの大きな理由を見つけます。

  • プロセスが分岐すると、親と子の両方が同じRSSで表示されます。ただし、Linuxはcopy-on-write両方のプロセスが実際に同じメモリを使用するように採用しています。プロセスの1つがメモリを変更した場合にのみ、実際に複製されます。そのため、このfree数はtopRSSの合計よりも小さくなります。

  • RSS値には共有メモリは含まれません。共有メモリはどのプロセスにも所有されてtopいないため、RSSに含めないでください。そのため、このfree数はtopRSSの合計よりも大きくなります。


ああ、ありがとう!free -mはシステム全体の実際の共有メモリの合計を示すといつも思っていました。しかし、「man ps」が指摘しているように、「共有メモリ列は無視されるべきです。廃止されました。」
デビッドホルター

申し訳ありませんが、スワップの問題に答えていないため、この答えを受け入れることはできませんが、とにかくありがとうございます!
デビッドホルター

@DavidHalter何スワップ問題?私が提供した情報は、スワップを含むすべてのメモリに適用されます。
パトリック

通常、共有メモリはそれほど大きくありませんか?少なくとも、それはタスクマネージャーで見たものです。しかし、私のスワップはかなり頻繁に使用されます:1035 MB。PSの合計は1 GBであり、swap + rssの合計は> 2 GBです。rssだけでなく、プロセスが実際に使用しているメモリ量を確認したい。さらに興味深いのは、プロセスが使用しているスワップメモリ​​の量です。
デビッドホルター

1
@DavidHalterは、プロセスが使用しているメモリ量(共有を含む)を確認する場合は、「VSZ」列を確認します。
パトリック

1

合計メモリ使用量に関する限り、「free」の出力を信頼し、単一プロセスが使用しているメモリ量の一般的なアイデアについては「ps」を信頼する方が良いと思います。

「ps」のRSS値の合計が「free」と等しくないからといって、RSSでプロセスをソートし、殺すための最大のものを評価することを止めません。

そうは言っても、すべての努力がマシンが休止状態にできることを確認するだけのサービスである場合、(必要に応じてディスク上のファイルの形で)より多くのスワップを作成する方がおそらく簡単です。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.