如何检查哪个进程使用最多内存

如何检查哪个进程使用最多内存

当我检查free其中一台 Prod 服务器时,它显示 70% 的内存正在被使用:

             total       used       free     shared    buffers     cached
Mem:     164923172  141171860   23751312          0    4555616   20648048
-/+ buffers/cache:  115968196   48954976
Swap:      8388600          0    8388600

但我没有找到哪个进程正在使用内存,我尝试了该top命令,它显示进程仅使用内存 1.1 和 5.4 %

如何找到哪个进程正在使用内存?

下面是top命令的结果:

15085 couchbas  25   0 2784m 2.4g  40m S 183.7  1.5 299597:00 beam.smp
28248 tibco     18   0  124m 100m 3440 S 20.9  0.1   2721:45 tibemsd
15334 couchbas  15   0 9114m 8.6g 3288 S  9.0  5.4  12996:28 memcached
15335 couchbas  18   0  6024  600  468 S  2.0  0.0   1704:54 sigar_port
15319 couchbas  15   0  775m 2516  944 S  0.7  0.0 269:13.41 i386-linux-godu
12167 tibco     16   0 11284 1464  784 R  0.3  0.0   0:00.04 top
12701 root      15   0  451m 427m 2140 S  0.3  0.3  18:25.02 controller
13163 root      11  -5     0    0    0 S  0.3  0.0 289:58.58 vxglm_thread

答案1

这将显示使用内存最多的前 10 个进程:

ps aux --sort=-%mem | head

使用top:打开时top,按m将根据内存使用情况对进程进行排序。

但这并不能解决你的问题,在 Linux 中,一切要么是文件,要么是进程。所以你打开的文件也会占用内存。所以这不会有帮助。

lsof将为您提供所有打开的文件以及文件大小或文件偏移量(以字节为单位)。

答案2

你的内存实际上并没有被使用。默认情况下,Linux 只是将内容缓存在磁盘上,并将缓存的内容放在 RAM 的“已使用”部分中。

如果您加载实际使用该 RAM 的应用程序,那么它将供其使用。

http://www.linuxatemyram.com/

答案3

你可以用管道附注种类获得使用最多内存的进程。它还允许您指定您希望看到的其他流程详细信息:

ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -n -r | less

PS:上面假设你的内存栏是第一个“排序-k 1 -n -r

答案4

您可以使用命令slabtop来查看内核使用了哪些slab对象。
您还可以检查 /proc/meminfo 的输出

在输出中查找这两行

Slab:              68136 kB
SReclaimable:      21208 kB 

上面的示例显示内核使用了 68MB 的板缓存,并且可以回收 21MB。要回收,您可以使用此处描述的技术https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html-single/Performance_Tuning_Guide/#s-memory-tunables

echo 2 > /proc/sys/vm/drop_caches  

相关内容