実際に尋ねる前に、ちょうど明確にするために:はい、私はディスクキャッシュについて知っています、そして、いいえ、それは私の場合ではありません :)申し訳ありませんが、この前置きのために 🙂
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
私はthisとTotal 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
- memory – Linux: どのプロセスがすべての RAM を使用しているのか?- スーパーユーザー
- Pythonのプロセスが使用する総メモリ?- スタックオーバーフローです
- linux – ps aux出力の意味 – スーパーユーザー
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