因此free
报告总字节数为 12318288,已使用字节数为 11916148,可用字节数为 402140(实际上为零)。
然后,top
读起来像这样:
Mem: 12318288k total, 11916596k used, 401692k free, 53756k buffers
Swap: 11894776k total, 40596k used, 11854180k free, 11291256k cached
但按 MEM% 排序时,前几个进程是:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1288 postgres 20 0 6361m 6.0g 6.0g S 0 51.3 4:14.82 postgres
1285 postgres 20 0 6358m 125m 125m S 0 1.0 0:04.04 postgres
490 www-data 20 0 232m 30m 4536 S 0 0.3 0:00.42 apache2
493 www-data 20 0 229m 27m 4412 S 0 0.2 0:00.30 apache2
499 www-data 20 0 227m 25m 4552 S 0 0.2 0:01.30 apache2
500 www-data 20 0 227m 25m 4272 S 0 0.2 0:00.65 apache2
491 www-data 20 0 225m 23m 4328 S 0 0.2 0:00.22 apache2
583 www-data 20 0 226m 23m 4272 S 0 0.2 0:00.17 apache2
32603 nobody 20 0 145m 21m 876 S 0 0.2 0:00.46 memcached
除了分配给 postgres 的 6GB 之外,似乎没有什么真正占用内存,那么为什么要使用全部 12GB 的 RAM 呢?
答案1
正如 KahWee Teng 所说,这不是一件坏事。看起来你的大部分 RAM 都被用作缓存,这是一件非常好的事情。有关更多详细信息,请参见此处:
答案2
这不一定是坏事。至少您的应用程序正在使用它们。话虽如此,6GB 仍然用得很多。您是否调整了 PostgreSQL 的配置?
顺便说一下,top 中的内存与 free 中的内存加起来并不多。
您可能想阅读有关记忆的更多文章:
答案3
这是因为 Linux 不会完全释放内存。它会将内存缓存到内存中,以备将来需要。如果磁盘已满,则将释放最后使用的内存段。这是一种调整。(forums.gentoo.org/viewtopic.php?t=175419)它比我更好地解释了这种情况 :>
答案4
缓冲区 + 缓存。
请参阅此示例“free -m”输出:
$ free -m
total used free shared buffers cached
Mem: 1936 1413 522 0 14 500
-/+ buffers/cache: 898 1037
Swap: 2047 259 1788
总内存为 2Gb,已使用 (1413) == 898 (进程) + 14 (缓冲区) + 500 (缓存)
Linux 大量使用 RAM 来缓存/缓冲内容,因此使用 100% 的 RAM 非常正常。只要进程使用的内存达到 100%(即 RAM 用完),就会出现问题。