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


33

当我检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%

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

以下是最重要的命令结果:

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
尝试对顶部输出进行排序-运行时,按Shift + m
Eenoku 2014年

Answers:


50

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

ps aux --sort=-%mem | awk 'NR<=10{print $0}'

使用顶部:当您打开顶部时,m将根据内存使用情况缩短处理时间。

但这并不能解决您的问题,在Linux中,一切都是文件或进程。因此您打开的文件也会占用内存。因此这无济于事。

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


5
您可以使用head此awk脚本代替它-它提供相同的输出,并且您不必编写许多奇怪的字符。
发泡胶飞


6

您可以通过管道对ps进行排序传输以使用最多的内存来获取进程。它还将允许您指定希望通过它查看的其他过程详细信息:

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

PS:以上假设您的内存列是第一个“ sort -k 1 -n -r


3

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

在输出中查找这两行

Slab:              68136 kB
SReclaimable:      21208 kB 

上面的示例显示内核正在使用68MB的平板缓存,可以回收21MB。要进行回收,可以使用此处介绍的技术https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/6/html-single/Performance_Tuning_Guide/#s-memory-tunables

echo 2 > /proc/sys/vm/drop_caches  

1

对于交互式分析,您可以使用htop,然后按功能键F6选择排序顺序,例如PERCENT_CPU(内存使用率(百分比)),M_RESIDENT(常驻内存大小,所使用的实际内存),M_SIZE(虚拟内存大小)或M_SHARE(共享内存)。前两个是相关数字

绿线是螺纹。打(大写)KH隐藏它们。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.