如何找出正在吞噬所有内存的进程

AlB*_*izi 8 linux suse

我正在使用 SUSE,我有 31GB 的内存 Mem:总共 31908592k,已使用 31429632k,478960k 空闲,12176k 缓冲区 如何找出哪个进程占用了我所有的内存。

Dav*_*man 9

看起来你正在跑步free,看着第一行,然后吓坏了。没关系; 很多人都这样做。

忽略输出的第一行free。真的。Linux非常积极地从磁盘缓存数据,甚至包括“换出”的虚拟内存页面,在 RAM 中,所有缓存的数据在free第一行都被视为“已使用” ,即使它可以在微秒内再次可用(或更少,这些天)如果需要。

您需要查看来自 的第二行输出free,标记为-/+ buffers/cache:。该行将告诉您运行程序实际占用了多少内存,而忽略了缓冲区和缓存目前正在使用的内容。

例如,我的机器当前显示:

             total       used       free     shared    buffers     cached
Mem:       3083924    2177300     906624          0     461344     837008
-/+ buffers/cache:     878948    2204976
Swap:      4000148          0    4000148
Run Code Online (Sandbox Code Playgroud)

尽管目前只有 906624 字节的 RAM 完全未使用,但还有额外的 461344 字节缓冲区和 837008 字节缓存数据,如果有更重要的事情(即几乎任何事情),它们可以或多或少地立即可用) 需要内存,总共有 2204976 字节可供我使用。


Ign*_*ams 8

运行top,然后按ShiftO,然后N,最后EnterQ要退出时按。

并且不要忘记,“Linux 吃了我的 RAM!” .