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

linux memory performance

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

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はディスクキャッシュをカウントしていないので、実際には42Mbしかないのでは?と思って、ディスクキャッシュをオフにしてみましたが、何の効果もありませんでした

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

top - 15:09:00 up  2:09,  2 users,  load average: 0.02, 0.16, 0.11
Tasks: 112 total,   1 running, 111 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   4046868k total,  4001368k used,    45500k free,      748k buffers
Swap: 16777208k total,    68840k used, 16708368k free,    16632k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  SWAP COMMAND
3214 ntp       15   0 23412 5044 3916 S  0.0  0.1   0:00.00  17m ntpd
2319 root       5 -10 12648 4460 3184 S  0.0  0.1   0:00.00 8188 iscsid
2168 root      RT   0 22120 3692 2848 S  0.0  0.1   0:00.00  17m multipathd
5113 mysql     18   0  474m 2356  856 S  0.0  0.1   0:00.11 472m mysqld
4106 root      34  19  251m 1944 1360 S  0.0  0.0   0:00.11 249m yum-updatesd
4109 root      15   0 90152 1904 1772 S  0.0  0.0   0:00.18  86m sshd
5175 root      15   0 90156 1896 1772 S  0.0  0.0   0:00.02  86m sshd

再起動しても何の役にも立ちませんし、このマシン(4コア、4Gb RAM、RAID1)では普通に考えられないような非常に遅い速度です

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

そこで、最後に質問ですが、もし誰かが実際にどのプロセスがメモリを多用しているのかを調べる方法を知っているのであれば教えてください

  138  Timur  2012-03-09


ベストアンサー

Linuxでは、topプロセスで<キーを押すと、出力表示のソートを左に移動させることができます。デフォルトでは%CPUでソートされているので、4回キーを押すとVIRTでソートされます

もう一つの方法としては

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

は、プロセスの仮想サイズでソートされた出力を提供する必要があります

こちらがロングバージョンです

ps --everyone --format=pid,vsz,comm= | sort --numeric-sort --key=2

119  Karlson  2012-03-09


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

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

86  notnull  2016-02-09


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

proc/meminfo を素早くチェックして HugePages_ の設定を確認することで、少なくとも 1 つの予期せぬメモリ消費のトラブルシューティングを開始することができます

14  Death Rider  2012-10-15


私の場合は、サーバがvmw_balloonモジュールを有効にしたVMware仮想サーバであることが問題でした

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

Running:

$ vmware-toolbox-cmd stat balloon
5189 MB

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

$ free
total        used        free      shared  buff/cache   available
Mem:        8174716     5609592       53200       27480     2511924     2458432
Swap:       8386556        6740     8379816

5  Mitar  2018-03-31


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

ps aux | less

2  Atul  2013-07-08


私はthisTotal memory used by Python process?- スタックオーバーフロー、それが私の答えです。私は今、特定のプロセス(パイソン)カウントツールを取得します

# 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

Reference

2  Chu-Saing Lai  2016-10-21


内容のあるshow-memory-usage.shというスクリプトを作ります

#!/bin/sh
ps -eo rss,pid,user,command | sort -rn | head -$1 | 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") }
'

chmod +x show-memory-usage.shで実行可能にして、./show-memory-usage.sh 10 (10 => show max 10 lines)のように呼び出します

Output Example:

5.54   GB 12783  mysql      /usr/sbin/mysqld

1.02   GB 27582  root       /usr/local/cpanel/3rdparty/bin/clamd

131.82 MB 1128   company+   /opt/cpanel/ea-php73/root/usr/bin/php /home/companyde/redesign.company.de/bin/magento queue:consumers:start inventory.mass.update --single-thread --max-messages=10000

131.21 MB 1095   company+   /opt/cpanel/ea-php73/root/usr/bin/php /home/companyde/redesign.company.de/bin/magento queue:consumers:start product_action_attribute.update --single-thread --max-messages=10000

131.19 MB 1102   company+   /opt/cpanel/ea-php73/root/usr/bin/php /home/companyde/redesign.company.de/bin/magento queue:consumers:start product_action_attribute.website.update --single-thread --max-messages=10000

130.80 MB 1115   company+   /opt/cpanel/ea-php73/root/usr/bin/php /home/companyde/redesign.company.de/bin/magento queue:consumers:start exportProcessor --single-thread --max-messages=10000

130.69 MB 1134   company+   /opt/cpanel/ea-php73/root/usr/bin/php /home/companyde/redesign.company.de/bin/magento queue:consumers:start inventory.reservations.update --single-thread --max-messages=10000

130.69 MB 1131   company+   /opt/cpanel/ea-php73/root/usr/bin/php /home/companyde/redesign.company.de/bin/magento queue:consumers:start inventory.reservations.cleanup --single-thread --max-messages=10000

130.69 MB 1107   company+   /opt/cpanel/ea-php73/root/usr/bin/php /home/companyde/redesign.company.de/bin/magento queue:consumers:start codegeneratorProcessor --single-thread --max-messages=10000

130.58 MB 1120   company+   /opt/cpanel/ea-php73/root/usr/bin/php /home/companyde/redesign.company.de/bin/magento queue:consumers:start inventory.source.items.cleanup --single-thread --max-messages=10000

2  Felipe  2016-03-14


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

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

1  prosti  2019-03-31


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

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

誰かのお役に立てれば幸いです

0  Vodyanikov Andrew Anatolevich  2019-07-12


タイトルとURLをコピーしました