我们知道使用交换空间而不是RAM(内存)会严重降低Linux的性能。那么,有人可能会问,因为我有足够的可用内存,完全删除交换空间不是更好吗?简短的回答是,不会。即使你有足够的RAM,在启用交换时也会有性能优势。
Linux
如果安装了足够多的服务器内存,您会经常发现在长时间运行后,将使用交换空间。从实时聊天服务器中查看以下示例:
交换空间
这里free-h的输出显示了308M的交换空间。当我运行交换检查时,没有任何持续或不及时交换I/O活动的迹象。此外,kswap服务不会消耗太多CPU时间。实际上,kswap进程无法在顶部找到(按CPU时间排序的顶级进程)。要确认我使用了以下命令:
交换空间
所以在这种情况下,交换使用不会损害Linux服务器性能。但让我们来看看交换空间如何真正帮助 Linux服务器性能。
具有足够RAM的系统上交换空间的优点
交换空间
这是正常的,对于Linux系统来说,使用某些交换是一件好事,即使仍有可用的RAM。Linux内核将移动几乎没有用于交换空间的内存页,以确保内存中更多可缓存的空间可用于更频繁使用的内存页(页面是一块内存)。当内核被迫加压内存页进出内存和交换空间时,交换使用会成为性能问题。
另一个优点是交换使管理员有时间对低内存问题作出反应。我们经常会注意到服务器缓慢行动并且在登录时会注意到大量交换。没有交换(如下一节所述)内存不足可能会产生更多突然和严重的连锁反应。所以通常我建议将交换空间设置为大小最大进程的大小。例如,MySQL在my.cnf中配置了内存。它甚至可以更小。特别是如果您有适当的监控和/或警报。
有人建议没有比总RAM略大的交换或交换大小。如果你能提出正确的理由,那么这可能是你的选择。但是,在服务器上,情况并非如此,您应该根据交换对特定应用程序的影响来平衡您的决定。交换不会改变健康服务器或桌面所需的RAM量。它旨在与健康系统的性能互补。
总结一下:
-即使仍有可用的RAM,Linux内核也会将几乎没有用过的内存页移动到交换空间中。
-最好换掉一段时间不活动的内存页面,将经常使用的数据保存在缓存中,这应该在服务器空闲时发生,这是内核的目标。
-如果导致延长性能问题,中断或响应时间(没有适当的监控/警报),请避免将交换空间设置得过大。