所以free报告12318288总字节,11916148使用,和402140免费(实际上什么都没有)。
然后, top看起来像这样:
Mem: 12318288k total, 11916596k used, 401692k free, 53756k buffers Swap: 11894776k total, 40596k used, 11854180k free, 11291256k cached
但是按MEM%sorting的前几个进程是:
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的内存呢?
正如KahWee Teng所说,这不是一件坏事。 它看起来像你的RAM大部分被用于caching,这是一件非常好的事情。 在这里看到更多的细节:
这不一定是坏事。 至less你的应用程序正在使用它们。 也就是说,6GB还是用了很多。 你调整PostgreSQL的configuration?
在顶部的内存不加上免费的方式。
你可能喜欢阅读更多的内存:
这是因为linux并没有完全释放内存。 它会将其caching到内存中,以备将来使用。 如果磁盘已满,则最后使用的内存段将被释放。 这是一种调整。 (forums.gentoo.org/viewtopic.php?t=175419)它比我更好地解释情况:>
缓冲区+caching。
看到这个示例“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
总RAM为2Gb,使用(1413)== 898(进程)+ 14(缓冲区)+ 500(caching)
Linux大量使用RAM来caching/缓冲内容,所以使用100%的RAM非常正常。 当进程使用的内存达到100%时(即:内存用完),就会出现问题。