首页 文章

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

提问于
浏览
218

我有一台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 .

8 回答

  • 28

    首先,重复这个咒语一段时间:"unused memory is wasted memory" . Linux内核保留了大量的文件元数据和所请求的文件,直到看起来更重要的东西将数据推出 . 这就是为什么你可以运行:

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

    让第二个 find 实例以荒谬的速度运行 .

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

    其次,你想要找到满足你所有记忆的过程;在 top 中使用 M 命令按内存使用排序 . 您可以随意忽略 VIRT 列,它只会告诉您已分配了多少虚拟内存,而不是该进程使用了多少内存 . RES 报告了驻留或当前处于ram中的内存量(相对于交换到磁盘或从未实际分配过的内存,尽管被请求) .

    但是,因为 RES 将计算,例如 /lib/libc.so.6 几乎每个进程都有一次内存,它并不是一个过程正在使用多少内存的精确度量 . SHR 列报告与其他进程共享多少内存,但不能保证另一个进程实际共享 - 它可以是可共享的,只是没有其他人想要共享 .

    smem工具旨在帮助用户更好地测量每个进程应该归咎于多少内存 . 它做了一些聪明的工作来弄清楚什么是真正独特的,共享的,并按比例计算共享内存与共享内存的进程 . smem 可以帮助你了解你的记忆力比 top 更好,但 top 是一个很好的第一个工具 .

  • 4

    在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,然后按键n选择显示按存储器使用顺序,然后按Enter键 . 您将看到按内存使用情况排序的活动进程

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

    (在sort命令中添加-n数字标志 . )

  • 20

    首先你应该阅读an explanation on the output of free . 结论:流程至少可以使用 10.7 GB 的内存 .

    然后你应该定义一个进程的“内存使用”(它不容易或不明确,相信我) .

    然后我们可以帮助更多:-)

  • 269

    按内存使用列出和排序进程:

    ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS
    
  • 1

    ps aux --sort '%mem'

    来自procps' ps(Ubuntu 12.04上的默认值)生成如下输出:

    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    ...
    tomcat7   3658  0.1  3.3 1782792 124692 ?      Sl   10:12   0:25 /usr/lib/jvm/java-7-oracle/bin/java -Djava.util.logging.config.file=/var/lib/tomcat7/conf/logging.properties -D
    root      1284  1.5  3.7 452692 142796 tty7    Ssl+ 10:11   3:19 /usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
    ciro      2286  0.3  3.8 1316000 143312 ?      Sl   10:11   0:49 compiz
    ciro      5150  0.0  4.4 660620 168488 pts/0   Sl+  11:01   0:08 unicorn_rails worker[1] -p 3000 -E development -c config/unicorn.rb             
    ciro      5147  0.0  4.5 660556 170920 pts/0   Sl+  11:01   0:08 unicorn_rails worker[0] -p 3000 -E development -c config/unicorn.rb             
    ciro      5142  0.1  6.3 2581944 239408 pts/0  Sl+  11:01   0:17 sidekiq 2.17.8 gitlab [0 of 25 busy]                                                                          
    ciro      2386  3.6 16.0 1752740 605372 ?      Sl   10:11   7:38 /usr/lib/firefox/firefox
    

    所以这里的Firefox是最重要的消费者,拥有16%的内存 .

    您也可能对 . . . 有兴趣:

    ps aux --sort '%cpu'
    
  • 35

    您可以使用以下步骤指定要排序的列:

    steps:
    * top
    * shift + F
    * select a column from the list
        e.g. n means sort by memory,
    * press enter
    * ok
    
  • 17

    您可以通过在终端中执行此代码来查看内存使用情况:

    $ watch -n2 free -m
    $ htop
    

相关问题