交换区

交换区是硬盘上的一块特殊区域,用于存储那些当前不使用的内存页,这样可以在物理内存紧张时,将这些页换出到硬盘上,从而释放物理内存供其他进程使用。

交换区的作用是扩展系统的可用内存空间,它允许操作系统在物理内存不足时,将不常用的内存页换出到硬盘上,这样就可以在不增加物理内存的情况下,支持更多的进程运行,提高内存的使用效率。

所以,显而易见使用交换区会导致性能变差。因此在性能优化里面,一个常见的措施就是尽可能减少交换区的使用。举个例子来说,在使用 Kafka 之类的中间件的时候,我们会将它的最大内存设置为不大于物理内存。一般都是让中间件使用的内存加上操作系统占用的内存,不大于物理内存。

这样可以确保很少触发换入换出,也就是避免使用交换区。

当然,类似的另外一个手段是调整 Linux 下的 vm.swapness 的值。例如说调整到 1,也就是尽可能规避使用交换区。

这两种手段是可以混合使用的。例如说在 Kafka 的服务器上,同时限制住 Kafka 的堆大小,以及 Kafka 所在 Linux 系统的 vm.swapness 参数到一个极小的值,例如说 1。