私は、ソフトウェアの面であまり実行されていないLinuxマシンを持っていますが、インストールされているメモリの2GBのうち1.7GBを使用しています。私が自由に走ると、私は得ます:
total used free shared buffers cached
Mem: 2072616 1979972 92644 0 164876 129740
-/+ buffers/cache: 1685356 387260
Swap: 498004 1632 496372
top
を実行すると、free
の最初の行と同じ番号が表示されます(メモリ使用量が修正されたため、再現できません)。
ただし、ps aux
を実行すると、すべてのプロセスのメモリ使用量は295.9MBになります。これは、空きが使用済みとして報告する1.7GBのメモリとはかけ離れています。
なぜそのような不一致があるのですか?
編集:
リクエストされた追加情報は次のとおりですが、free
を使用して約360MB、ps aux
の合計を使用して約300MBを示しているため、あまり役に立たないと思います。問題が自動的に修正された理由がわかりません。
free
total used free shared buffers cached
Mem: 2072616 668484 1404132 0 185868 139196
-/+ buffers/cache: 343420 1729196
Swap: 498004 1632 496372
cat /proc/meminfo
MemTotal: 2072616 kB
MemFree: 1404628 kB
Buffers: 185792 kB
Cached: 139196 kB
SwapCached: 544 kB
Active: 411448 kB
Inactive: 210208 kB
Active(anon): 218636 kB
Inactive(anon): 78216 kB
Active(file): 192812 kB
Inactive(file): 131992 kB
Unevictable: 0 kB
Mlocked: 0 kB
HighTotal: 1187784 kB
HighFree: 761112 kB
LowTotal: 884832 kB
LowFree: 643516 kB
SwapTotal: 498004 kB
SwapFree: 496372 kB
Dirty: 60 kB
Writeback: 0 kB
AnonPages: 296168 kB
Mapped: 14536 kB
Shmem: 184 kB
Slab: 39088 kB
SReclaimable: 31720 kB
SUnreclaim: 7368 kB
KernelStack: 888 kB
PageTables: 1184 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 1534312 kB
Committed_AS: 407808 kB
VmallocTotal: 122880 kB
VmallocUsed: 5132 kB
VmallocChunk: 112808 kB
DirectMap4k: 12280 kB
DirectMap4M: 897024 kB
ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 1620 548 ? Ss May18 0:04 init [3]
root 2 0.0 0.0 0 0 ? S May18 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S May18 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S May18 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S May18 0:00 [watchdog/0]
root 6 0.0 0.0 0 0 ? S May18 0:00 [migration/1]
root 7 0.0 0.0 0 0 ? S May18 0:00 [ksoftirqd/1]
root 8 0.0 0.0 0 0 ? S May18 0:00 [watchdog/1]
root 9 0.0 0.0 0 0 ? S May18 0:00 [events/0]
root 10 0.0 0.0 0 0 ? S May18 0:00 [events/1]
root 11 0.0 0.0 0 0 ? S May18 0:00 [khelper]
root 17 0.0 0.0 0 0 ? S May18 0:00 [async/mgr]
root 166 0.0 0.0 0 0 ? S May18 0:00 [sync_supers]
root 168 0.0 0.0 0 0 ? S May18 0:00 [bdi-default]
root 170 0.0 0.0 0 0 ? S May18 0:03 [kblockd/0]
root 171 0.0 0.0 0 0 ? S May18 0:03 [kblockd/1]
root 174 0.0 0.0 0 0 ? S May18 0:00 [kacpid]
root 175 0.0 0.0 0 0 ? S May18 0:00 [kacpi_notify]
root 176 0.0 0.0 0 0 ? S May18 0:00 [kacpi_hotplug]
root 332 0.0 0.0 0 0 ? S May18 0:00 [ata/0]
root 333 0.0 0.0 0 0 ? S May18 0:00 [ata/1]
root 334 0.0 0.0 0 0 ? S May18 0:00 [ata_aux]
root 336 0.0 0.0 0 0 ? S May18 0:00 [kseriod]
root 371 0.0 0.0 0 0 ? S May18 0:00 [rpciod/0]
root 372 0.0 0.0 0 0 ? S May18 0:00 [rpciod/1]
root 406 0.0 0.0 0 0 ? S May18 0:00 [khungtaskd]
root 407 0.0 0.0 0 0 ? S May18 0:20 [kswapd0]
root 408 0.0 0.0 0 0 ? S May18 0:00 [aio/0]
root 409 0.0 0.0 0 0 ? S May18 0:00 [aio/1]
root 410 0.0 0.0 0 0 ? S May18 0:00 [nfsiod]
root 411 0.0 0.0 0 0 ? S< May18 0:00 [kslowd000]
root 412 0.0 0.0 0 0 ? S< May18 0:00 [kslowd001]
root 414 0.0 0.0 0 0 ? S May18 0:00 [crypto/0]
root 415 0.0 0.0 0 0 ? S May18 0:00 [crypto/1]
root 1172 0.0 0.0 0 0 ? S May18 0:00 [scsi_tgtd/0]
root 1173 0.0 0.0 0 0 ? S May18 0:00 [scsi_tgtd/1]
root 1177 0.0 0.0 0 0 ? S May18 0:00 [scsi_eh_0]
root 1215 0.0 0.0 0 0 ? S May18 0:00 [kpsmoused]
root 1228 0.0 0.0 0 0 ? S May18 0:05 [jbd2/sda3-8]
root 1229 0.0 0.0 0 0 ? S May18 0:00 [ext4-dio-unwr]
root 1230 0.0 0.0 0 0 ? S May18 0:00 [ext4-dio-unwr]
root 1322 0.0 0.0 2044 632 ? S<s May18 0:00 /sbin/udevd --d
root 1650 0.0 0.0 0 0 ? S May18 0:25 [vmmemctl]
root 1678 0.0 0.0 0 0 ? S May18 0:00 [kjournald]
root 1680 0.0 0.0 0 0 ? S May18 0:00 [ksuspend_usbd]
root 1681 0.0 0.0 0 0 ? S May18 0:00 [khubd]
root 1709 0.0 0.0 0 0 ? S May18 0:02 [flush-8:0]
root 3157 0.0 0.0 5976 1576 ? Ss May18 0:10 /usr/bin/vmtool
root 3222 0.0 0.0 5984 276 ? S May18 0:00 supervising sys
root 3223 0.0 0.0 6220 1452 ? Ss May18 0:00 /usr/sbin/syslo
root 3224 0.0 0.0 4428 1240 ? S May18 0:00 /bin/sh /etc/sy
clamav 3808 0.1 11.4 256396 237488 ? SNsl May18 2:44 /usr/sbin/clamd
clamav 3818 0.0 0.0 12368 1684 ? SNs May18 0:03 /usr/bin/freshc
root 3984 0.0 0.0 4048 1164 ? Ss May18 0:00 /usr/sbin/ntpd
root 4106 0.0 0.0 14228 1868 ? Ss May18 0:00 /usr/sbin/smbd
root 4115 0.0 0.0 8360 1128 ? Ss May18 0:00 /usr/sbin/nmbd
root 4119 0.0 0.0 14228 852 ? S May18 0:00 /usr/sbin/smbd
root 4176 0.0 0.0 8488 1832 ? Ss May18 0:00 sendmail: accep
smmsp 4179 0.0 0.0 8212 1372 ? Ss May18 0:00 sendmail: Queue
root 4235 0.0 0.1 9824 2700 ? S May18 0:06 /usr/sbin/snmpd
root 4295 0.0 0.0 5684 1060 ? Ss May18 0:00 /usr/sbin/sshd
root 4415 0.0 0.0 2044 512 ? S< May18 0:00 /sbin/udevd --d
uptimed 4456 0.0 0.0 1620 440 ? Ss May18 0:00 /usr/sbin/uptim
root 4515 0.0 0.0 3456 716 ? Ss May18 0:00 /usr/sbin/cron
root 4609 0.0 0.0 1672 668 tty1 Ss+ May18 0:00 /sbin/agetty 38
root 4610 0.0 0.0 1672 668 tty2 Ss+ May18 0:00 /sbin/agetty 38
root 4611 0.0 0.0 1676 672 tty3 Ss+ May18 0:00 /sbin/agetty 38
root 4612 0.0 0.0 1672 668 tty4 Ss+ May18 0:00 /sbin/agetty 38
root 4613 0.0 0.0 1668 664 tty5 Ss+ May18 0:00 /sbin/agetty 38
root 4614 0.0 0.0 1668 664 tty6 Ss+ May18 0:00 /sbin/agetty 38
root 8761 0.0 0.1 8740 3000 ? Ss 02:02 0:02 sshd: root@nott
root 8763 0.0 0.0 5356 1632 ? Ss 02:02 0:02 /usr/lib/misc/s
root 8774 0.0 0.1 8744 2988 ? Ss 02:02 0:00 sshd: root@nott
root 8776 0.0 0.0 5368 1632 ? Ss 02:02 0:00 /usr/lib/misc/s
root 8787 0.0 0.1 8736 2944 ? Ss 02:02 0:00 sshd: root@nott
root 8789 0.0 0.0 5232 1520 ? Ss 02:02 0:00 /usr/lib/misc/s
root 8812 0.0 0.1 8740 3000 ? Ss 02:04 0:12 sshd: root@nott
root 8814 0.0 0.0 5416 1676 ? Ss 02:04 0:13 /usr/lib/misc/s
root 8825 0.0 0.1 8744 2992 ? Ss 02:04 0:00 sshd: root@nott
root 8827 0.0 0.0 5352 1628 ? Ss 02:04 0:00 /usr/lib/misc/s
root 8838 0.0 0.1 8880 3080 ? Ss 02:04 0:00 sshd: root@nott
root 8840 0.0 0.0 5436 1768 ? Ss 02:04 0:00 /usr/lib/misc/s
root 15237 0.0 0.1 8744 2856 ? Ss 16:00 0:00 sshd: hudson-sl
1000 15239 0.0 0.0 8884 1844 ? S 16:00 0:00 sshd: hudson-sl
1000 15240 0.0 0.0 2908 1084 ? Ss 16:00 0:00 bash -c wget --
1000 15242 0.2 2.1 671620 44412 ? Sl 16:00 0:08 /etc/Java-confi
root 15575 0.0 0.1 8768 3008 ? Ss 16:25 0:00 sshd: root@pts/
root 15577 0.0 0.0 4304 1012 pts/0 Ss+ 16:25 0:00 /usr/bin/screen
root 15620 0.0 0.1 5428 2100 ? Ss 16:25 0:00 /usr/bin/SCREEN
root 15621 0.0 0.1 5304 2576 pts/1 Ss+ 16:25 0:00 -/bin/bash
smmsp 15875 0.0 0.1 8492 3476 ? S 16:54 0:00 sendmail: o4JLs
root 15888 0.0 0.1 8768 3004 ? Ss 16:58 0:00 sshd: root@pts/
root 15890 0.0 0.0 4316 1028 pts/2 Ss+ 16:59 0:00 /usr/bin/screen
root 15933 0.0 0.1 5432 2096 ? Ss 16:59 0:00 /usr/bin/SCREEN
root 15934 0.1 0.1 5304 2604 pts/3 Ss 16:59 0:00 -/bin/bash
root 16021 0.0 0.0 3856 1060 pts/3 R+ 17:00 0:00 ps aux
ただし、ps auxを実行すると、すべてのプロセスのメモリ使用量は295.9MBになります。これは、空きが使用済みとして報告する1.7GBのメモリとはかけ離れています。
なぜそのような不一致があるのですか?
Linuxのメモリ管理は単純に奇抜なのでしょうか?
冗談はさておき、真剣に-Linuxのメモリ管理は単純な獣ではありません。 「無料」と「使用済み」を「表示」するにはさまざまな方法があり、 最も明白な数でさえ、一度調べてみるとそれほど明白ではない可能性があります 。 「使用済み」の定義を定量化し、その定義を、特に使用しているwhat番号に関して、表示している数値に適用することをお勧めします。 。
共有メモリを考慮していますか? 「使用済み」のカウント方法に応じて、プログラムのメモリは小さい場合もあれば、大きい場合もあります。 共有メモリを個別にカウントしますか、それとも接続されている各プロセスが共有メモリを所有しているようにカウントしますか?
共有ライブラリ も同じ動作をする可能性があります。プログラムは、別のプログラムと共有されているライブラリ(libmylibrary.so)をロードします。メモリの1つのビューは、ライブラリが使用されたメモリにカウントされないことを示しています。別の見解では、それは実行するだけでなく、それをカウントします2回-使用したばかりのプログラムに対して1回、すでに使用していたプログラムに対して1回、各プログラムがライブラリが機能するには、仮想メモリマッピングが必要です。 3番目のビューは、ライブラリが実際にはそれをロードするために必要なメモリのみを占有していることを示しています。 メモリの「正しい」ビューはどれですか?
ディスクキャッシュ/バッファは、「使用済み」と「未使用」の複雑なビューを作成することもできます。システムはプログラムによって使用されていないメモリを使い果たしますが、プログラムをロードするためにメモリが必要な場合、キャッシュは破棄され、そのプログラムのインスタンスをロードするために再利用されます。 3Mバイトのコードだけをメモリに簡単にロードできますが、600Mバイトのディスクキャッシュを消費します。繰り返しますが、どちらが「正しい」ビューですか?