web-dev-qa-db-ja.com

実際のメモリ使用量でソートされた上位プロセスを確認する方法

12Gのメモリを搭載したサーバーがあります。 topの一部を以下に示します。

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を実行しています。

221
user3111525

まず、このマントラをしばらく繰り返します。「未使用のメモリは無駄なメモリです」。 Linuxカーネルは、 huge 量のファイルメタデータと要求されたファイルを、より重要に見えるものがそのデータを押し出すまで保持します。それがあなたが実行できる理由です:

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

2番目のfindインスタンスをとてつもない速度で実行します。

Linuxは、メモリの使用量の急増をあまり手間をかけずに処理するために、「空き」メモリを少しだけ残します。

第二に、あなたはすべての記憶を食べているプロセスを見つけたいです。 topでは、Mコマンドを使用してメモリ使用量で並べ替えます。 VIRT列は無視してください。これは、プロセスが使用しているメモリの量ではなく、割り当てられた仮想メモリの量を示すだけです。 RESは、 resident 、または現在RAM内にあるメモリの量を報告します(ディスクにスワップされるか、要求されたにもかかわらず実際に割り当てられることはありません)。

ただし、RESはカウントされます。 /lib/libc.so.6メモリは、ほぼすべてのプロセスに対して1回です。これは、プロセスが使用しているメモリ量の正確な測定値ではありません。 SHR列は、他のプロセスと shared のメモリ量を報告しますが、別のプロセスが実際に共有しているという保証はありません-共有できる可能性があり、他の誰も共有したくないだけです。

smem ツールは、個々のプロセスで really を非難するメモリ量をユーザーが正確に判断できるように設計されています。本当にユニークなもの、共有されているものを把握するために巧妙な作業を行い、共有メモリを共有しているプロセスに比例的に集計します。 smemは、topよりもメモリが向上している場所を理解するのに役立ちますが、topは優れた最初のツールです。

272
sarnold

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。メモリ使用量順にアクティブプロセスが表示されます。

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

(sortコマンドに-n数値フラグを追加しました。)

37
Angelinux

最初に free の出力に関する説明を読んでください。結論:あなたは少なくとも 10.7 GB プロセスですぐに使えるメモリを持っています。

それからあなたはプロセスのための「メモリ使用量」が何であるかを定義するべきです(それは容易ではないかあいまいさではない、私を信頼します)。

それなら私たちはもっと助けになるかもしれません:-)

28
thkala

メモリ使用量によるプロセスの一覧表示とソート

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

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'

次の手順で、ソートする列を指定できます。

 steps:
 * top 
 * shift + F 
 *リストから列を選択します
 nはメモリによるソートを意味します。
 * enterを押します
 * ok 
4
Eric Wang

あなたの端末でこのコードを実行することでメモリ使用量を見ることができます:

$ watch -n2 free -m
$ htop
1
Cubiczx

この簡単なコマンドがあります。

$ free -h
0
Christian IC