1. ホーム
  2. linux

[解決済み】実際のメモリ使用量でソートされたトッププロセスを見るには?

2022-04-01 17:15:15

質問

メモリが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

私の理解が正しければ、システムには362MBの空きメモリしかありません。私の質問は、どのプロセスが最も多くのメモリを消費しているかを調べるにはどうしたらよいかということです。

背景情報として、システムで実行されているのは 64bit OpenSuse 12 .

解決方法は?

まず、「未使用メモリは無駄なメモリである」という言葉をしばらく繰り返してください。Linuxカーネルは 巨大 ファイルのメタデータと要求されたファイルを、より重要そうなものがそのデータを押し出すまで、大量に保存します。そのために実行できるのです。

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

で、2番目の find インスタンスがとんでもないスピードで実行されます。

Linuxは、メモリ使用量の急増を無理なく処理するために、ほんの少ししかメモリを「解放」しません。

次に、メモリを食いつぶしているプロセスを見つけることです。 top を使用します。 M コマンドを使用すると、メモリ使用量でソートできます。を無視してもかまいません。 VIRT この列は、仮想メモリの割り当て量を示すだけで、プロセスが使用しているメモリの量を示すわけではありません。 RES は、どれだけのメモリが 常駐 ディスクにスワップされたり、要求されても実際には割り当てられていないのとは対照的です)。

しかし RES は、例えば /lib/libc.so.6 のメモリをほぼすべてのプロセスで一度だけ使用するため、あるプロセスがどれだけのメモリを使用しているかを知るための素晴らしい指標とは言えません。そのため SHR 列は、どれだけのメモリが 共有 しかし、他のプロセスが実際に共有しているという保証はありません。

その smem このツールは、ユーザーがどの程度のメモリが必要かを判断するのに役立つように設計されています。 本当に は、個々のプロセスのせいにしています。これは、何が本当にユニークで、何が共有されているかを把握し、共有メモリとそれを共有するプロセスを比例的に集計する巧妙な作業を行います。 smem よりも、メモリがどこに行っているかを理解するのに役立つかもしれません。 top が、しかし top は、最初のツールとして最適です。