应该像这样使用Swap吗?

我有双Nehalem四核至强5520和12GB DDR3内存的服务器。 服务器的平均内存使用量仅为10-15%左右,而所使用的Swap则显示了10%+。 这是正常的,或者可能是错误的是造成这一点。 我以为只有在没有足够内存的情况下才会使用Swap。

我在CentOS 5.3上运行Apache / 2.0.63。

这没有什么错。 随着时间的推移,内核将逐渐进入虚拟内存。 如果您的服务器有活动“尖峰”,并且您目前空闲的内存快速填满,也会发生这种情况。 内存系统上的压力会导致页面出现,直到压力降低到设定值(您可以在/ proc / sys / vm中查看)。 即使是在一个相当闲散的系统上,随着时间的推移,我也看到了逐渐的调出。 所以,除非交换相当活跃(大量页面错误导致分页活动),我不会担心这一点。

如果你真的担心,那么你总是可以交换,然后开始。 这将强制这些交换的页面回到内存中。 我不build议这样做,但是如果你想的话,你可以。 在做这件事之前,确保你有足够的空闲内存。

你不应该担心这个问题 – 如果内核认为数据将不能被访问到足够保证在物理内存中, 使用交换。

如果您想要监视“不良”交换使用情况,最好监视交换读写的速率 ,而不是简单地使用它。

例如…

# vmstat 3 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- rb swpd free buff cache si so bi bo in cs us sy id wa 1 0 19528 45324 19348 240132 50 17 93 26 30 30 0 1 98 1 0 0 19528 45324 19348 240156 0 0 0 3 9 23 0 0 100 0 0 0 19528 45324 19352 240156 0 0 0 9 9 25 0 0 100 0 0 0 19528 45324 19352 240156 0 0 0 0 5 17 0 0 100 0 

第一份报告告诉你,自从机器第一次被提出以来,状态(平均值)是什么,其余的应该是(在上述情况下)3秒的平均值。

注意si等字段大多为零 – 这就是你感兴趣的。

这很好,正如已经指出的那样,使用高峰可能会导致这个问题,或者内核可能会决定将某些项目放入交换中,因为使用内存作为其他内容(页面caching)更为明智。

作为其他问题的答案指出, sysctl vm.swappiness可能是你感兴趣的避免这一点。

(作为答案发布,因为它太长,不能作为Avery Payne答案的补充评论)

而且,如果在已经过去的高峰期间使用了交换,则可能会发现交换中的大部分数据当前也在RAM中。 如果Linux从交换到RAM读取页面,它不会立即释放交换空间,除非它需要更多的数据,这样,如果它需要交换页面(并知道它们中的数据没有改变)它实际上并不需要将页面写入磁盘,因为它们已经在那里了。

有关详细信息,请参阅/ proc / meminfo。 在我的一个servlets器上:

 olm:/proc# free -m total used free shared buffers cached Mem: 1487 1457 30 0 15 1094 -/+ buffers/cache: 347 1139 Swap: 980 112 868 olm:/proc# cat meminfo MemTotal: 1523572 kB MemFree: 30688 kB Buffers: 15724 kB Cached: 1120884 kB SwapCached: 67868 kB SwapTotal: 1004052 kB SwapFree: 888928 kB 

所以这里所分配的112Mb的交换空间〜66Mb目前也存在于RAM中。 从交换中删除66Mb没有意义,因为没有其他用途的空间需求(有很多完全可用的交换空间)。 如果交换满了,这些页面将被重新分配,如果页面在RAM中改变,它们将被标记为脏并且可以被重新分配,但是如果需要将它们交换出来,内核可以为自己节省大量的磁盘写入。

如果我强制清除磁盘caching和缓冲区

 sync; echo 3 > /proc/sys/vm/drop_caches 

结果保持不变:

 olm:/proc# free -m total used free shared buffers cached Mem: 1487 1278 209 0 0 979 -/+ buffers/cache: 298 1189 Swap: 980 112 868 olm:/proc# cat meminfo MemTotal: 1523572 kB MemFree: 212320 kB Buffers: 652 kB Cached: 1005732 kB SwapCached: 67868 kB SwapTotal: 1004052 kB SwapFree: 888928 kB 

请求清除磁盘高速caching后,“高速caching”的读数仍然很高,因为这是分配给VMWare VM的计数内存。 SwapCached的读取没有改变,因为没有意义将页面复制回RAM,仅仅是因为RAM现在是空闲的 – 在将RAM分配给别的东西之前,它们可能永远不会被需要,所以这些读取将被浪费。

上面的情况与你的稍有不同,因为这台机器几乎总是把所有的内存分配给某些东西(虚拟机,其他进程,I / Ocaching+缓冲区),但根据自上次启动以来机器的加载历史logging,在交换区域的分配空间中的一大块页面也同样在RAM中。