什么是交换内存?

我正在使用RAM来存储我的一些数据库表,其他的都存储在硬盘上。

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

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

如果你的应用程序是“使用交换”,那么你需要使用较less的内存或购买更多的内存。

(Swap非常有用,因为不使用的应用程序可以存储在磁盘上,直到它们被使用,然后它们可以被“分页”并再次正常运行,虽然它不在内存中,但操作系统可以使用该内存如磁盘caching,所以这是一个非常有用的function,但如果你没有足够的物理内存来运行你的程序,那么你肯定需要更多的内存。幸运的是,现在内存真的很便宜。

一台电脑有一定的物理内存。 但大多数时候我们想要更多。 所以我们交换磁盘上的一些内存。

每次我们需要这个内存时,它都需要被交换回内存(交换一些其他的内容)。 有非常聪明的algorithm来减less延迟,但有时候我们还是要等。

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

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

  • 在CPU级别上,有寄存器。 这是最快的记忆,但数量有限。
  • 在CPU上也有一个小的内存caching。 在这里存储一小段正在运行的程序以便快速访问。 search分支预测algorithm,如果你想知道更多。
  • 有时在CPU和主存储器之间有2级高速caching。
  • 下一级是主内存(RAM)。
  • 最后一级和最慢的是磁盘,有时你可以使用USB棒作为额外的内存。
cat /proc/pid/smaps 

如果你不想使用swap,那么不要使用交换分区(注释掉/etc/fstab ),但是这将阻止启动新进程,并且如果物理内存不足。 总的来说这不是一个好主意…不是很安全,甚至不是非常有用,因为操作系统会将热门页面保留在内存中,并将交换到最近没有使用的那些磁盘上。

另一个解决scheme可能是破解你的数据库,以便将页面locking到内存中(我知道可以完成,但是我不能告诉你现在如何),但无论如何,这就像是你的数据库将使用它自己的交换和caching机制。

要知道什么是交换和虚拟内存如何工作…我build议你看看一些操作系统的讲座,也许麻省理工学院的开放课件可以帮助。

我find了一个部分的答案。 交换内存是计算机硬盘中的一个空间,操作系统将使用该空间将实际上在RAM上的信息释放给其他应用程序。 当系统需要一个新的进程的内存并且没有时,这个应该完成,所以我们可以看到,如果我们的系统有足够的RAM,那么可能不需要SWAP内存。

UPDATE

要find交换空间(或虚拟内存)的位置,可以转到任务pipe理器(CTRL + ALT + DEL),并从VIEW – > COLUMNS – > VIRTUAL MEMORY中打开。 现在只需计算内存使用情况和虚拟内存之间的差异。 另外这里是一个说明如何看到它,如果你正在运行Vista: http : //www.ehow.com/how_5067693_increase-swap-space.html

交换是用作RAM的硬盘空间。 (相对而言) 非常缓慢,但是当他们试图处理更多的数据,然后他们的RAM可以处理时,电脑就不会崩溃。

要停止使用交换进程 – 安装更多的RAM。

如果你不想让你的进程使用交换内存,只需要禁用交换内存。 不幸的是,如果内存不足,Linux内核将会终止一些正在运行的进程,释放一些内存以供使用。

如果你的系统有足够的内存,你可以不用交换内存。

我有一个768Mb的RAM,不使用交换内存的笔记本电脑。 这对我的需求来说已经足够了。 我有一个256Mb的RAM服务器,不使用交换内存。 它使用OpenVZ虚拟化运行8个虚拟服务器,没有问题。

所以,如果你需要交换内存,这取决于你。