
top
以下に示す出力(全て現在アクティブなプロセス): この仮想サーバーが、使用済み (使用済み - キャッシュ済み、 によって検証済みfree
) として約 500M の物理メモリを報告しているのに、'RES' の合計がそれよりはるかに低いのはなぜでしょうか? の合計はRES
常に使用済み物理メモリを超えるべきではないでしょうか? メモリは、何のために、何によって使用されているのでしょうか?
top - 08:43:23 up 75 days, 5:00, 1 user, load average: 0.08, 0.08, 0.04
Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.2%us, 0.1%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 2400000k total, 713792k used, 1686208k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 200764k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 19232 544 384 S 0.0 0.0 0:00.08 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd/201208
3 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper/2012080
323 pdns-rec 20 0 169m 2980 1152 S 0.0 0.1 1:58.98 pdns_recursor
560 root 20 0 6160 200 196 S 0.0 0.0 0:00.00 portreserve
578 dbus 20 0 21536 324 284 S 0.0 0.0 0:00.00 dbus-daemon
598 nobody 20 0 17040 2108 880 S 0.0 0.1 4:48.33 openvpn
607 nobody 20 0 16124 1112 724 S 0.0 0.0 0:41.54 openvpn
1347 root 20 0 78732 592 508 S 0.0 0.0 0:12.35 master
1355 postfix 20 0 78984 612 516 S 0.0 0.0 0:02.63 qmgr
1515 root 20 0 9232 564 396 S 0.0 0.0 0:39.69 gam_server
11077 root 16 -4 10648 272 268 S 0.0 0.0 0:00.00 udevd
12912 root 20 0 168m 57m 3040 S 0.0 2.4 0:56.31 puppetd
13187 root 20 0 11308 1224 1220 S 0.0 0.1 0:00.00 mysqld_safe
13295 mysql 20 0 1348m 44m 4232 S 0.0 1.9 246:49.61 mysqld
13391 root 20 0 66608 516 404 S 0.0 0.0 0:00.00 sshd
13411 root 20 0 20468 740 644 S 0.0 0.0 0:00.71 crond
13452 root 20 0 243m 1428 820 S 0.0 0.1 0:00.36 rsyslogd
16087 app 20 0 14896 1096 880 R 0.0 0.0 0:00.00 top
18993 newrelic 20 0 25764 124 84 S 0.0 0.0 0:00.00 nrsysmond
18994 newrelic 20 0 103m 1540 1036 S 0.0 0.1 0:46.22 nrsysmond
23268 postfix 20 0 81356 3384 2508 S 0.0 0.1 0:00.00 pickup
29550 root 20 0 387m 3516 1088 S 0.0 0.1 2:25.48 fail2ban-server
31434 root 20 0 96264 2408 2376 S 0.0 0.1 0:00.00 sshd
31438 user 20 0 96264 816 640 S 0.0 0.0 0:00.25 sshd
31439 user 20 0 105m 1264 1260 S 0.0 0.1 0:00.00 bash
31456 root 20 0 165m 1768 1764 S 0.0 0.1 0:00.00 sudo
31457 root 20 0 138m 1020 1016 S 0.0 0.0 0:00.00 su
31458 app 20 0 13440 3332 1492 S 0.0 0.1 0:00.07 bash
注: 私が尋ねているのは、人々が一般的に尋ねているものとまったく逆のことです。
リクエストcat /proc/memoinfo
:
MemTotal: 2400000 kB
MemFree: 1682660 kB
Cached: 202948 kB
Active: 132988 kB
Inactive: 180704 kB
Active(anon): 19668 kB
Inactive(anon): 91076 kB
Active(file): 113320 kB
Inactive(file): 89628 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 4 kB
Writeback: 0 kB
AnonPages: 110744 kB
Shmem: 2568 kB
Slab: 2268056 kB
SReclaimable: 2260740 kB
SUnreclaim: 7316 kB
仮想化技術はVirtuozzoだと思います。
答え1
VMに特化して言えば、RAMの使用量は「外を見て、中を覗く" 対 "中を見て回る「
VM が約 500 MB の使用状況を報告するのに、top
使用中の RAM がそれよりはるかに少ないのはなぜですか?
VM が約 500 MB の使用状況を報告しているにもかかわらず (VM マネージャーで、と想定しています)、合計がRES
それよりはるかに低い場合、それは予想どおりです。
VM (VMware、Virtuozzo コンテナ、Hyper-V、Solaris Zone など) は、プロセスが使用する以上の RAM を消費します。VM を実際に実行するために必要な「オーバーヘッド」は、そのメトリックにまとめられます (仮想デバイス マッピング、仮想デバイス キャッシュ (ネットワークやディスクなど)、カーネル スペースなど)。
完全を期すために、ほとんどの人が尋ねる「反対の」問題について簡単に説明します(それが私がこの質問を見つけた方法です)。
Top の「常駐セット」サイズ ( RES
) が物理メモリよりも「大きい」
MM_ANONPAGES
常駐セットのサイズは、カーネルによって「匿名」( ) ページと「ファイル バック」( ) ページの合計として計算されますMM_FILEPAGES
。 1 つのページが複数回カウントされる可能性がある (複数のプロセスに帰属する) ため、実行中のすべてのプロセスからRES
がtop
計算される理由が説明され、可能な範囲を超えてメモリを消費しているように見えます。