2012-03-09 14:13:35 +0000 2012-03-09 14:13:35 +0000
131
131

Linux:どのプロセスがすべてのRAMを使用しているかを見つける?

実際に尋ねる前に、ちょうど明確にするために:はい、私はディスクキャッシュについて知っています、そして、いいえ、それは私の場合ではありません :) 申し訳ありませんが、この前置きのために :)

私はCentOS 5を使用しています。システム内のすべてのアプリケーションのスワップが激しく、システムが非常に遅くなっています。私がfree -mをするとき、私が得たものは次のとおりです:

total used free shared buffers cached
Mem: 3952 3929 22 0 1 18
-/+ buffers/cache: 3909 42
Swap: 16383 46 16337

だから、私は実際に使用するために42 Mbしか持っていません!私が理解している限りでは、-/+ buffers/cacheは、私が理解している限りでは、私が理解している限りでは、私が理解している限りでは、私が理解している限りでは、私が理解している限りでは、私が理解している限りでは、私が理解している限りでは、私が理解している限りでは、私が理解している限りでは、私が理解している限りでは、私が理解している限りでは、私が理解している限りでは、私が理解している限りでは、私が理解している限りでは、私は理解していません。私が理解している限りでは、topではディスクキャッシュはカウントされないので、実際には42Mbしかないのではないか?と思って、ディスクキャッシュをオフにしてみましたが、何の効果もありませんでした。

そこで、誰が私のRAMを全部使っているのか調べようと思い、topを使ってみました。しかし、どうやら私のRAMを使っているプロセスはないと報告しているようです。私のトップにあるプロセスはMySQLだけなのですが、0.1%のRAMと400Mbのスワップを使っています。他のサービスやアプリケーションを実行しようとしたときにも同じように表示され、すべてのプロセスがスワップを使用しています。

だから、それで - 私はかなり確信していますこれは、通常、それが削減され、他のプロセスがRAMを使用するようにしている必要がありますので、RAMを使用している人は、ディスクキャッシュではなく、スワップに行きます。

回答 (9)

115
115
115
2012-03-09 14:25:01 +0000

Linuxでは、topプロセスの中で<キーを押すと、出力表示のソートを左にシフトさせることができます。デフォルトでは、それは%CPUによってソートされますので、キーを4回押せば、あなたの答えを与える仮想メモリサイズであるVIRTによってソートされます。

これを行う別の方法は次のとおりです:

ps -e -o pid,vsz,comm= | sort -n -k 2

はあなたを与えるべきであり、プロセスの仮想サイズによってソートされた出力。

78
78
78
2016-02-09 21:12:26 +0000

プロセスのメモリをメガバイト単位で表示し、プロセスのパスを表示します。

14
14
14
2012-10-15 15:05:01 +0000

同じ症状を示しているが、メモリの枯渇を示しているサーバーでの余談です。結局見つけたのは、32GBのRAMと12000に設定された巨大なページを持つDBのために設定されたボックスからのsysctl.confでした。このボックスには2GBのRAMしかないので、すべての空きRAMを巨大なページ(960個しかない)に割り当てていました。このボックスはRAMが2GBしかないので、すべての空きRAMを巨大なページに割り当てていました。

5
5
5
2018-03-31 03:38:27 +0000

私の場合、問題はサーバがVMwareの仮想サーバで、vmw_balloonモジュールが有効:

$ lsmod | grep vmw_balloon
vmw_balloon 20480 0
vmw_vmci 65536 2 vmw_vsock_vmci_transport,vmw_balloon

実行中:

$ vmware-toolbox-cmd stat balloon
5189 MB

だから約5GBのメモリが実際にはホストによって回収されていました。そのため、私のVMには8GBのメモリが “公式に "入っていたにもかかわらず、実際にはもっと少なかったのです。

2
2
2
2013-07-08 06:05:54 +0000

ps コマンドを使用してプロセスの詳細情報を得ることもできます。

2
2
2
2016-10-21 10:51:37 +0000

これ」(https://superuser.com/a/1037753/205255)と「Total memory used by Python process? - Stack Overflow」(https://stackoverflow.com/a/40173829/686105)を参考にしてみました。私は今、特定のプロセス(Python)カウントツールを取得します。

# Megabyte.
$ ps aux | grep python | awk '{sum=sum+$6}; END {print sum/1024 " MB"}'
87.9492 MB

# Byte.
$ ps aux | grep python | awk '{sum=sum+$6}; END {print sum " KB"}'
90064 KB

私のプロセスリストを添付します。

$ ps aux | grep python
root 943 0.0 0.1 53252 9524 ? Ss Aug19 52:01 /usr/bin/python /usr/local/bin/beaver -c /etc/beaver/beaver.conf -l /var/log/beaver.log -P /var/run/beaver.pid
root 950 0.6 0.4 299680 34220 ? Sl Aug19 568:52 /usr/bin/python /usr/local/bin/beaver -c /etc/beaver/beaver.conf -l /var/log/beaver.log -P /var/run/beaver.pid
root 3803 0.2 0.4 315692 36576 ? S 12:43 0:54 /usr/bin/python /usr/local/bin/beaver -c /etc/beaver/beaver.conf -l /var/log/beaver.log -P /var/run/beaver.pid
jonny 23325 0.0 0.1 47460 9076 pts/0 S+ 17:40 0:00 python
jonny 24651 0.0 0.0 13076 924 pts/4 S+ 18:06 0:00 grep python

参照

1
1
1
2016-03-14 20:50:46 +0000

内容が

#!/bin/sh
ps -eo rss,pid,user,command | sort -rn | head -10 | awk '{ hr[1024**2]="GB"; hr[1024]="MB";
 for (x=1024**3; x>=1024; x/=1024) {
 if ($1>=x) { printf ("%-6.2f %s ", $1/x, hr[x]); break }
 } } { printf ("%-6s %-10s ", $2, $3) }
 { for ( x=4 ; x<=NF ; x++ ) { printf ("%s ",$x) } print ("\n") }
 '
```の`show-memory-usage.sh`というスクリプトを作成します。
0
0
0
2019-07-12 19:46:37 +0000

私のHyper-V上のubuntuサーバDISTRIB RELEASE=18.04では、ほとんどのメモリが使用されていましたが、すべてのプロセスは問題ありませんでした。(snapdとunattended-upgrパッケージを削除したことは認めますが、95%のメモリはまだ使用されていました。)

答えは、Hyper-Vはダイナミックメモリを持っているので、メインシステムで使用するためのメモリを取り、ubuntuはそれが使用されているとフラグを立てました。

0
0
0
2019-03-31 17:51:48 +0000

これはまた、プロセス ID を取得し、使用された MB でソートし、(プロセスを作成した)コマンドの概要を示します:

ps aux | awk '{print $6/1024 " MB\t\t" $2 "\t" $11}' | sort -n

関連する質問

6
10
5
37
13