如何查看按实际内存使用情况排序的顶级进程?

我有一个12G内存的服务器。 顶部的一个片段如下所示:

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                                                                                                                                                                      
12979 frank  20   0  206m  21m  12m S   11  0.2  26667:24 krfb                                                                                                                                                                                                                                                          
13 root      15  -5     0    0    0 S    1  0.0  36:25.04 ksoftirqd/3                                                                                                                                                                                                                                                   
59 root      15  -5     0    0    0 S    0  0.0   4:53.00 ata/2                                                                                                                                                                                                                                                         
2155 root      20   0  662m  37m 8364 S    0  0.3 338:10.25 Xorg                                                                                                                                                                                                                                                          
4560 frank  20   0  8672 1300  852 R    0  0.0   0:00.03 top                                                                                                                                                                                                                                                           
12981 frank  20   0  987m  27m  15m S    0  0.2  45:10.82 amarok                                                                                                                                                                                                                                                        
24908 frank  20   0 16648  708  548 S    0  0.0   2:08.84 wrapper                                                                                                                                                                                                                                                       
1 root      20   0  8072  608  572 S    0  0.0   0:47.36 init                                                                                                                                                                                                                                                          
2 root      15  -5     0    0    0 S    0  0.0   0:00.00 kthreadd

free -m显示以下内容:

             total       used       free     shared    buffers     cached
Mem:         12038      11676        362          0        599       9745
-/+ buffers/cache:       1331      10706
Swap:         2204        257       1946

如果我理解正确,系统只有362 MB的可用内存。 我的问题是:如何找出哪个进程占用大部分内存?

就像背景信息一样,系统运行64bit OpenSuse 12


首先,重复一下这个咒语:“未使用的内存浪费了内存”。 Linux内核保留大量的文件元数据和请求的文件,直到看起来更重要的东西将数据推出。 这就是为什么你可以运行:

find /home -type f -name '*.mp3'
find /home -type f -name '*.aac'

并有第二个find实例以荒谬的速度运行。

Linux只留下一点点“免费”内存来处理内存使用的高峰,而不需要太多的努力。

其次,你想找到正在吃掉你所有记忆的过程; 在top使用M命令按内存使用进行排序。 随意忽略VIRT列,它只是告诉你分配了多少虚拟内存,而不是该进程使用多少内存。 RES报告有多少内存驻留在内存中,或者目前是内存(而不是交换到磁盘或从未实际分配,尽管被请求)。

但是,由于RES几乎将每个进程的/lib/libc.so.6内存计数一次,因此它不完全是衡量进程使用多少内存的真棒测量。 SHR专栏报告了与其他进程共享多少内存,但不能保证另一个进程实际上是共享的 - 这可能是可共享的,只有其他人不想共享。

smem工具旨在帮助用户更好地衡量每个单独过程应该承受多少内存。 它做了一些聪明的工作来找出什么是真正独特的,什么是共享的,并按比例将共享内存与共享它的进程进行比较。 smem可以帮助你理解你的记忆力会比top意志更强,但是top是一款出色的第一个工具。


在linux / unix中使用使用top命令的快速提示

$ top

然后按Shift + m(即写入大写M )。

man top

SORTING of task window
  For compatibility, this top supports most of the former top sort keys.
  Since this is primarily a service to former top users, these commands do
  not appear on any help screen.
    command   sorted-field                  supported
      A         start time (non-display)      No
      M         %MEM                          Yes
      N         PID                           Yes
      P         %CPU                          Yes
      T         TIME+                         Yes

或者,也可以:按下Shift + f,然后选择显示器按内存使用情况,然后按Enter键。 您将看到由内存使用情况排序的活动进程


ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 10

(添加-n数字标志来排序命令。)

链接地址: http://www.djcxy.com/p/80163.html

上一篇: How to see top processes sorted by actual memory usage?

下一篇: Measuring memory usage in .Net