Prodサーバーの1つでfree
を確認すると、70%のメモリが使用されていることがわかります。
total used free shared buffers cached
Mem: 164923172 141171860 23751312 0 4555616 20648048
-/+ buffers/cache: 115968196 48954976
Swap: 8388600 0 8388600
しかし、どのプロセスがメモリを使用しているかはわかりませんでした。top
コマンドを試しましたが、メモリを使用しているプロセスが1.1と5.4%しか表示されていません。
メモリを使用しているプロセスを見つけるにはどうすればよいですか?
以下は、上位のコマンド結果です。
15085 couchbas 25 0 2784m 2.4g 40m S 183.7 1.5 299597:00 beam.smp
28248 tibco 18 0 124m 100m 3440 S 20.9 0.1 2721:45 tibemsd
15334 couchbas 15 0 9114m 8.6g 3288 S 9.0 5.4 12996:28 memcached
15335 couchbas 18 0 6024 600 468 S 2.0 0.0 1704:54 sigar_port
15319 couchbas 15 0 775m 2516 944 S 0.7 0.0 269:13.41 i386-linux-godu
12167 tibco 16 0 11284 1464 784 R 0.3 0.0 0:00.04 top
12701 root 15 0 451m 427m 2140 S 0.3 0.3 18:25.02 controller
13163 root 11 -5 0 0 0 S 0.3 0.0 289:58.58 vxglm_thread
これは、最もメモリを使用している上位10プロセスを示します。
ps aux --sort=-%mem | awk 'NR<=10{print $0}'
topの使用:topを開いたときにm
を押すと、メモリ使用量に基づいて処理が短縮されます。
しかし、これはあなたの問題を解決しません、Linuxではすべてがファイルかプロセスのどちらかです。開いたファイルもメモリを消費します。これは役に立ちません。
lsof
は、ファイルのサイズまたはバイト単位のファイルオフセットで、開いているすべてのファイルを提供します。
ラムは実際には使用されていません。 Linuxはデフォルトでディスク上のものをキャッシュするだけで、キャッシュの内容をRAMの「使用済み」セクションに配置します。
そのRAMを実際に使用するアプリケーションをロードすると、そのRAMが使用されます。
http://www.linuxatemyram.com/ を参照してください
psおよびsortをパイプして、メモリを最も多く使用するプロセスを取得できます。また、表示したい他のプロセスの詳細を指定することもできます。
ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -n -r | less
PS:上記では、メモリ列が最初に "sort -k 1 -n -r"であると想定しています
コマンドslabtopを使用して、カーネルで使用されているスラブオブジェクトを表示できます。
また、/ proc/meminfoの出力を確認できます
出力でこれらの2行を探します
Slab: 68136 kB
SReclaimable: 21208 kB
上記の例では、カーネルによって68MBのスラブキャッシュが使用されており、21MBを再利用できます。再利用するには、ここで説明されている手法を使用できます https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html-single/Performance_Tuning_Guide/#s-memory-tunables
echo 2 > /proc/sys/vm/drop_caches
インタラクティブな分析では、 htop
を使用して、ファンクションキー F6
ソート順を選択します。 PERCENT_CPU
(パーセント単位のメモリ使用量)、M_RESIDENT
(常駐メモリサイズ、使用される実メモリ)、M_SIZE
(仮想メモリサイズ)またはM_SHARE
(共有メモリのサイズ)。 最初の2つは関連する番号です 。
緑の線は糸です。 (大文字)K
とH
を押すと、それらが非表示になります。