什么是交换内存?

什么是交换内存?

我使用 RAM 存储一些数据库表,其他表则存储在硬盘中。

今天我发现我的进程正在使用交换内存。那么什么是交换内存?我如何检测哪个进程正在使用交换内存?我如何阻止它们使用交换内存?

答案1

如果物理内存不足,则可以使用虚拟内存,虚拟内存将内存中的数据存储在磁盘上。从磁盘读取比从内存读取慢几个数量级,因此这会大大降低所有速度。(在实际内存和虚拟内存之间交换数据是“交换”。磁盘上的空间是“交换空间”。)

如果您的应用程序“使用交换”,那么您要么需要使用更少的内存,要么购买更多的 RAM。

(交换很有用,因为未使用的应用程序可以存储在磁盘上,直到使用它们为止。然后它们可以被“分页”并再次正常运行。虽然它不在内存中,但操作系统可以将该内存用于其他用途,例如磁盘缓存。所以这是一个非常有用的功能,但是如果你没有足够的物理内存来运行你的程序,你肯定需要更多的内存。幸运的是,现在的内存真的非常便宜。)

答案2

计算机具有一定数量的物理内存。但大多数时候我们需要更多内存。因此,我们会在磁盘上交换一些内存。

每次我们需要该内存时,都需要将其交换回内存(将其他部分交换出去)。有非常智能的算法可以最大限度地减少延迟,但有时我们仍然需要等待。

在 Windows 上,如果您查看任务管理器,可以显示页面错误列。这显示了应用程序请求磁盘上需要交换的内存块的次数。页面错误很多 = 应用程序运行缓慢。

此过程在多个层面上使用。从快到慢的总结:

  • 在 CPU 层面,有寄存器。这是最快的内存,但数量有限。
  • CPU 上还有一个小型内存缓存。这里存储了正在运行的程序的一小部分,以便快速访问。如果您想了解更多信息,请搜索分支预测算法。
  • 有时 CPU 和主存储器之间有二级缓存。
  • 下一级是主存储器(RAM)。
  • 最后一级也是最慢的一级是磁盘,有时您可以使用 USB 记忆棒作为额外的内存。

答案3

cat /proc/pid/smaps

如果您不想使用交换,则不要使用交换分区(注释掉 中的行/etc/fstab),但这会阻止启动新进程,并且如果物理内存不足,malloc 会失败。这通常不是一个好主意……不太安全,甚至不太有用,因为操作系统会将热页面保留在内存中,并将最近未使用的页面交换到磁盘。

另一个解决方案可能是破解您的数据库,以便将页面锁定到内存中(我知道可以做到这一点,但我现在无法告诉您具体如何做),但无论如何,您的数据库可能会使用它自己的交换和缓存机制。

要知道什么是交换以及虚拟内存如何工作...我建议你看看一些操作系统讲座,也许麻省理工学院开放式课程可能会有所帮助。

答案4

同时Linux 和 Windows,有专用的 RAM 内存空间。如果内存内存不足以容纳进程,它从辅助存储中借用一定量的内存这样,RAM 就能找到足够的空间来容纳新进程。因此,从硬盘借用的空间称为交换内存。 A交换文件是一个创建系统文件SSD 或 HDD 上的临时存储空间当系统内存不足时。

为了清除交换内存

sudo swapoff -a
sudo swapon -a

sudo free –h
sudo shutdown -r now

希望它能对你有所帮助。

相关内容