it-swarm.cn

什么是交换内存?

我正在使用RAM)存储一些数据库表,而另一些存储在硬盘中。

今天,我知道我的进程正在使用交换内存。现在什么是交换内存,如何检测正在使用交换内存的进程,以及如何阻止它们使用交换内存?

30
developer

如果物理内存用完,则使用虚拟内存,它将数据存储在磁盘上的内存中。从磁盘读取比从内存读取慢几个数量级,因此这会减慢一切。 (在实内存和虚拟内存之间交换数据是“交换”。磁盘上的空间是“交换空间”。)

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

(交换很有用,因为未使用的应用程序可以在使用之前存储在磁盘上。然后可以将它们“分页”并再次正常运行。尽管它不在内存中,但是操作系统可以使用该内存。因此,这是一个非常有用的功能,但是,如果您没有足够的物理内存来运行程序,则肯定需要更多的内存。幸运的是,这些天的内存确实很便宜。)

45
jrockway

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

每次我们需要该内存时,都需要将其交换回内存中(交换其他部分)。有一些非常智能的算法可以最大程度地减少延迟,但是有时候我们还是要等待。

在Windows上,如果您查看任务管理器,则可以显示列页面错误。这显示了应用程序请求磁盘上一块需要交换的内存的时间。大量页面错误=应用缓慢。

此过程在多个级别上使用。从快到慢的摘要:

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

如果您不想使用交换分区,请不要使用交换分区(在/etc/fstab),但是这将阻止启动新进程,并且如果物理内存不足,将使malloc失败。一般来说,这不是一个好主意……不是很安全,也不是很有用,因为操作系统会将热门页面保留在内存中,并将那些近期未使用的页面交换到磁盘上。

另一个解决方案可能是入侵数据库,以便将页面锁定到内存中(我知道可以做到,但是现在我不能确切告诉您如何操作),但是无论如何,数据库很可能会使用它自己的交换和缓存机制。

要知道什么是交换以及虚拟内存是如何工作的...我建议您看一些操作系统讲座,也许MIT Open Courseware会有所帮助。

3
fortran

我找到了部分答案。交换内存是计算机硬盘上的一个空间,操作系统将使用该空间将RAM)实际存在的信息放到另一个应用程序中释放。系统需要一个新进程的内存,而没有内存,因此我们可以看到,如果我们的系统有大量RAM,则可能不需要SWAP内存。

[〜#〜]更新[〜#〜]

要找出交换空间(或虚拟内存)的位置,可以转到任务管理器(CTRL + ALT + DEL),然后从“视图”->“列”->“虚拟内存”中打开。现在,只需计算内存使用量和虚拟内存之间的差异即可。另外,如果您正在运行Vista,这是如何查看的说明: http://www.ehow.com/how_5067693_increase-swap-space.html

1
faya