同时在Ubuntu服务器上高交换和未使用的内存

云中有一台Ubuntu 10.04 Web服务器,内存为1 GB。 这里是一个来自Munin的记忆图表:

在这里输入图像说明

但是我很难理解它:一方面,未使用的内存非常高, 但交换内存同时非常高,“提交”的内存是实际可用的方式。

只有在没有真正的存储空间的情况下,是否应该使用swap? 这是一个正常的内存使用情况图,或者在这里可能是错误的?

只有在没有真正的存储空间的情况下,是否应该使用swap?

这是不正确的。 当内核看到长时间没有使用的内存页面时,它会主动将它们交换出去(即使有很多其他可用的RAM),使得RAM空间可用于磁盘caching。

由于内存泄漏,观察系统缓慢死亡,我可以确认总是需要空闲内存。 UNIX / Linux需要一些空闲的内存来加载程序。 Unix往往会做大量的进程创build,并使用可用内存来加载这些程序。 如果没有空闲内存进程,执行将非常缓慢,因为在重新加载程序之前需要回收内存。

共享内存可以帮助许多程序使用相同的只读内存页面。 但是,可写页面需要按照每个进程进行分配。 磁盘缓冲区也有帮助,因为所需的代码可能已经在内存中。

对于长时间运行的程序来说,如果初始化代码和closures代码是分页的,那么就可以。 这假设这个代码的内存页面不被正在使用的代码共享。 有些程序可能很less使用可以换出的代码。 很less运行的程序也可以以最小的影响换出。

一旦开始主动交换页面内存和内存,性能将严重下降。