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%のみを使用していることがわかりました。
どのプロセスがメモリを使用しているかどうかはどうすればわかりますか?
top コマンドの結果は次のとおりです。
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
答え1
最も多くのメモリを使用する上位10のプロセスが表示されます。
ps aux --sort=-%mem | head
有効top
:オンの場合、押すとtop
メモリm使用量に基づいてプロセスがソートされます。
しかし、これは問題を解決しません。 Linuxでは、すべてがファイルまたはプロセスです。したがって、開こうとしているファイルもメモリを占有します。だからこれは役に立ちません。
lsof
ファイルサイズまたはファイルオフセット(バイト)で開いているすべてのファイルを提供します。
答え2
メモリは実際には使用されません。デフォルトでは、Linuxは単にコンテンツをディスクにキャッシュし、キャッシュされたコンテンツをRAMの「使用済み」部分に配置します。
そのRAMを実際に使用しているアプリケーションをロードすると、そのRAMを使用できます。
答え3
パイプが利用可能メモそしてタイプ最も多くのメモリを使用するプロセスを取得します。また、確認する追加のプロセス詳細を指定することもできます。
ps -eo pmem,pcpu,rss,vsize,args | sort -k 1 -n -r | less
PS:上記はメモリ列が最初です "ソート -k 1 -n -r」
答え4
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