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
を実行しています。
まず、このマントラをしばらく繰り返します。「未使用のメモリは無駄なメモリです」。 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
は優れた最初のツールです。
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。メモリ使用量順にアクティブプロセスが表示されます。
ps aux | awk '{print $2, $4, $11}' | sort -k2rn | head -n 10
(sortコマンドに-n数値フラグを追加しました。)
最初に free
の出力に関する説明を読んでください。結論:あなたは少なくとも 10.7 GB プロセスですぐに使えるメモリを持っています。
それからあなたはプロセスのための「メモリ使用量」が何であるかを定義するべきです(それは容易ではないかあいまいさではない、私を信頼します)。
それなら私たちはもっと助けになるかもしれません:-)
メモリ使用量によるプロセスの一覧表示とソート
ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS
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
あなたの端末でこのコードを実行することでメモリ使用量を見ることができます:
$ watch -n2 free -m
$ htop
この簡単なコマンドがあります。
$ free -h