我有一台配备 Dual Nehalem Quad Core Xeon 5520 和 12GB DDR3 RAM 的服务器。服务器的平均内存使用率只有 10-15% 左右,但使用的 Swap 显示 10%+。这是正常的,还是可能是什么问题导致了这种情况。我的印象是,只有在没有足够的可用内存时才使用交换。
我在 CentOS 5.3 上运行 Apache/2.0.63。
我有一台配备 Dual Nehalem Quad Core Xeon 5520 和 12GB DDR3 RAM 的服务器。服务器的平均内存使用率只有 10-15% 左右,但使用的 Swap 显示 10%+。这是正常的,还是可能是什么问题导致了这种情况。我的印象是,只有在没有足够的可用内存时才使用交换。
我在 CentOS 5.3 上运行 Apache/2.0.63。
这没有什么问题。随着时间的推移,内核将逐渐分页到虚拟内存中。如果您的服务器有活动“峰值”并且您当前可用的内存迅速填满,也会发生这种情况。内存系统上的压力会导致页面输出发生,直到压力降低到设定点(您可以在 /proc/sys/vm 中检查)。即使在一个相当空闲的系统上,随着时间的推移,我也看到了逐渐的页面输出。因此,除非交换相当活跃(大量页面错误导致分页活动),否则我不会担心这一点。
如果您真的很担心,您可以随时关闭交换,然后再打开。这将迫使那些交换的页面回到内存中。我不建议这样做,但如果你愿意,你可以这样做。在执行此操作之前,请确保您有足够的可用内存。
你不应该担心这一点——如果内核认为数据不会被访问到足以保证将其保存在物理内存中,则将使用交换。
如果您想监控“不良”交换使用情况,最好监控交换读取和写入发生的速率,而不是简单地监控它是否正在使用。
例如...
第一份报告告诉您自机器首次启动以来的状态(平均值),其余的应该是您(在上述情况下)3 秒的平均值。
请注意
si
andso
字段大多为零 - 这就是您感兴趣的内容。这很好,正如已经指出的那样,使用高峰可能会导致这种情况,或者内核可能会决定将某些项目放入交换中,因为将 RAM 用于其他东西(页面缓存)更聪明。
正如您可能感兴趣的其他问题的答案一样,请避免这种情况。
sysctl vm.swappiness
(作为答案发布,因为它太长了,无法作为附加评论添加到 Avery Payne 的答案中)
此外,如果在已经过去的高峰期使用了交换,您可能会发现交换中的大部分数据当前也在 RAM 中。如果 Linux 将页面从交换入读回 RAM,它不会立即释放交换空间,除非它需要它来存储更多数据,这样,如果它需要将页面换出(并且它知道其中的数据没有改变) ) 它实际上不需要将页面写入磁盘,因为它们已经存在。
有关详细信息,请参阅 /proc/meminfo。目前在我的一个小服务器上:
所以这里分配的 112Mb 交换空间中的 ~66Mb 当前也存在于 RAM 中。没有必要从交换中删除 66Mb,因为不需要空间用于其他用途(有大量完全可用的交换空间)。如果交换已满,这些页面将被重新分配,如果这些页面在 RAM 中发生变化,它们将被标记为脏页并且可以重新分配,但如果需要将它们换回,内核可以为自己节省大量磁盘写入。
如果我强制清除磁盘缓存和缓冲区
结果保持不变:
在要求清除磁盘缓存后,“缓存”读数保持高位,因为这也是分配给 VMWare 虚拟机的内存,因为分配的方式。SwapCached 读取并没有改变,因为仅仅因为 RAM 现在是空闲的,将页面复制回 RAM 是没有意义的 - 在 RAM 再次分配给其他东西之前可能永远不需要它们,因此这些读取将被浪费。
上述情况与您的情况略有不同,因为这台机器几乎总是将其所有 RAM 分配给某些东西(VM、其他进程、I/O 缓存+缓冲区),但根据您的机器自上次启动以来的加载历史记录,这不太可能交换区域中分配空间中的一大块页面同样也在 RAM 中。