
監視システムからメモリが98%使用済みという通知を何度か受けました。実行して top
合計すると、メモリ使用量は60%程度でした。メモリ列。数時間後、メモリ使用量は正常に戻りました (約 70%)。fs キャッシュを疑いましたが、free -m
これは証明されませんでした。
何かアイデアはありますか? サーバー: x86-64、ubuntu 12.04、8Gb RAM
# free -m
total used free shared buffers cached
Mem: 7958 7835 123 0 8 39
-/+ buffers/cache: 7787 171
Swap: 975 975 0
#top
top - 10:11:48 up 179 days, 14:25, 1 user, load average: 1.99, 1.81, 1.59
Tasks: 143 total, 1 running, 142 sleeping, 0 stopped, 0 zombie
Cpu(s): 2.8%us, 0.6%sy, 0.0%ni, 82.8%id, 13.6%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 8149424k total, 8017556k used, 131868k free, 6708k buffers
Swap: 999420k total, 999372k used, 48k free, 37952k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30562 mysql 20 0 6033m 2.6g 3160 S 14 32.9 74:37.56 mysqld
10898 www-data 20 0 25.3g 2.0g 1560 S 16 25.6 19:44.10 java
9570 rabbitmq 20 0 2611m 166m 1540 S 6 2.1 628:08.96 beam.smp
13166 redis 20 0 94276 72m 584 S 0 0.9 23:24.47 redis-server
3798 root 20 0 348m 29m 988 S 0 0.4 167:36.37 cimprovagt
7614 root 20 0 51468 28m 1256 S 0 0.4 0:02.59 bash
3677 root 20 0 4706m 26m 0 S 0 0.3 110:47.59 java
3458 bind 20 0 668m 5328 1488 S 0 0.1 0:23.38 named
7595 root 20 0 85380 2956 880 S 0 0.0 0:00.25 sshd
2061 root 10 -10 4996 2948 2104 S 0 0.0 13:39.72 iscsid
632 syslog 20 0 244m 2404 360 S 0 0.0 7:12.39 rsyslogd
5855 newrelic 20 0 107m 1852 1248 S 0 0.0 128:23.28 nrsysmond
1 root 20 0 24340 1516 736 S 0 0.0 0:29.96 init
2741 root 20 0 17340 1308 944 R 0 0.0 0:00.04 top
4214 root 20 0 45336 1264 1020 S 0 0.0 6:12.72 cdm
4235 root 20 0 12428 1108 908 S 0 0.0 10:55.38 processes
4178 root 20 0 19124 1064 856 S 0 0.0 7:20.07 controller
5853 ntp 20 0 37772 1036 872 S 0 0.0 7:40.35 ntpd
4179 root 20 0 86044 1024 848 S 0 0.0 9:55.54 spooler
4008 root 20 0 4090m 980 756 S 0 0.0 0:08.70 console-kit-dae
3790 root 20 0 422m 952 668 S 0 0.0 89:21.80 cimprovagt
3629 root 20 0 50032 868 752 S 0 0.0 1:17.44 sshd
4075 root 20 0 182m 844 408 S 0 0.0 0:02.90 polkitd
27661 root 20 0 101m 776 772 S 0 0.0 0:00.02 mysql
18465 root 20 0 101m 732 732 S 0 0.0 0:00.04 mysql
3436 root 20 0 19112 716 636 S 0 0.0 0:11.25 cron
3783 root 20 0 1009m 716 432 S 0 0.0 0:04.83 cimserver
26239 root 20 0 22092 700 696 S 0 0.0 0:00.03 bash
4181 root 20 0 13196 696 596 S 0 0.0 4:18.57 hdb
3406 root 20 0 14744 664 660 S 0 0.0 0:00.00 getty
3410 root 20 0 14744 664 660 S 0 0.0 0:00.00 getty
3428 root 20 0 14744 664 660 S 0 0.0 0:00.00 getty
3429 root 20 0 14744 664 660 S 0 0.0 0:00.00 getty
3432 root 20 0 14744 664 660 S 0 0.0 0:00.00 getty
3972 root 20 0 14744 664 660 S 0 0.0 0:00.00 getty
18452 root 20 0 22076 620 620 S 0 0.0 0:00.00 bash
361 root 20 0 22104 568 568 S 0 0.0 0:00.04 udevd
3441 root 20 0 15980 560 464 S 0 0.0 26:28.16 irqbalance
654 messageb 20 0 23948 516 324 S 0 0.0 0:01.98 dbus-daemon
676 root 20 0 21188 504 504 S 0 0.0 0:00.00 bluetoothd
3665 root 20 0 4400 492 488 S 0 0.0 0:00.00 sh
5546 rabbitmq 20 0 7672 488 308 S 0 0.0 1:04.49 epmd
26238 root 20 0 26092 476 476 S 0 0.0 0:00.24 screen
2060 root 20 0 4504 440 400 S 0 0.0 3:18.60 iscsid
答え1
バッファはFS キャッシュ。
バッファは特定のブロック デバイスに関連付けられており、ファイル システムのメタデータのキャッシュと実行中のページの追跡をカバーします。キャッシュには、保留中のファイル データのみが含まれます。つまり、バッファはディレクトリの内容、ファイルのアクセス許可を記憶し、特定のブロック デバイスでどのメモリから書き込まれ、どのメモリに読み込まれているかを追跡します。キャッシュには、ファイル自体の内容のみが含まれます。
https://stackoverflow.com/a/12547130/636573
また、提供されたスナップショットでは、上部に IOWAIT が 13% 表示されています。これは、OLTP データベースが必要なディスク IOPS を十分に得られていないように見えます。ストレージ サブシステムをアップグレードしてください。
答え2
まず戻って、トップ出力がメモリ使用量(識別子のサイズ)でソートされていることを確認してくださいRES
。そうでない場合は、質問を更新してください。それ出力。そうすると、実際に何が RAM を消費しているかがわかります。
2番目に、%MEM
列を忘れてください。その特定のケーキは嘘です(丸めのため)。代わりに、プログラムのidentサイズ(およびswap toを心配している場合はualサイズ)
に集中してください- sumRES
VIRT
それらの列と数字は、free
&top
出力に表示されるものと一致します。
上位の出力を見ると、巨大な (2.6G) MySQL プロセスと巨大な (2.0G) Java プロセスがあります。この 2 つが共謀してすべての RAM を食いつぶしているのではないかと思います (特定の Java プロセスが MySQL に要求している処理は、巨大な結果セットまたは中間データを生成することです)。Java
プロセスには 25G の仮想サイズもあります (!!)。明らかに、ガベージ コレクターが解放していないメモリが内部でリークしています (または、巨大な結果セットを非効率的に処理しているのかもしれません)。
おそらく、あなたのシステムは「通常の日」には 4~5G の RAM を使用して問題なく動作していると思いますが、この 2 つのプロセスが一緒になることにより、残りの RAM (およびそれ以上) が消費され、悪い状況に陥ります。
これらのプロセスが何をしているのかを調べて修正すれば、問題は解決します。