我正在使用RAM存储一些数据库表,而其他存储在硬盘中。
今天,我知道我的进程正在使用交换内存。现在什么是交换内存,我如何才能检测到哪个进程正在使用交换内存,如何阻止他们使用交换内存?
我正在使用RAM存储一些数据库表,而其他存储在硬盘中。
今天,我知道我的进程正在使用交换内存。现在什么是交换内存,我如何才能检测到哪个进程正在使用交换内存,如何阻止他们使用交换内存?
Answers:
如果物理内存用完,则使用虚拟内存,它将数据存储在磁盘上的内存中。从磁盘读取比从内存读取慢几个数量级,因此这会减慢一切。(在实内存和虚拟内存之间交换数据是“交换”。磁盘上的空间是“交换空间”。)
如果您的应用程序正在“使用交换”,则您需要使用更少的内存或购买更多的RAM。
(交换很有用,因为未使用的应用程序可以在使用之前存储在磁盘上。然后可以将它们“分页”并再次正常运行。尽管它不在内存中,但是操作系统可以使用该内存。因此,这是一个非常有用的功能,但是,如果您没有足够的物理内存来运行程序,则肯定需要更多的内存。幸运的是,这些天的内存确实很便宜。)
一台计算机具有一定数量的物理内存。但是大多数时候我们想要更多。因此,我们交换了磁盘上的一些内存。
每次我们需要该内存时,都需要将其换回内存(将其他部分交换出去)。有一些非常智能的算法可以最大程度地减少延迟,但是有时候我们还是要等待。
在Windows上,如果您查看任务管理器,则可以显示列页面错误。这显示了应用程序请求磁盘上一块需要交换的内存的时间。大量页面错误=应用缓慢。
此过程在多个级别上使用。从快到慢的摘要:
cat /proc/pid/smaps
如果您不希望使用swap,则不要使用swap分区(在中注释掉行/etc/fstab
),但这将阻止启动新进程,并且如果物理内存用尽,malloc将会失败。一般来说,这不是一个好主意……不是很安全,也不是很有用,因为操作系统会将热门页面保留在内存中,并将那些近期未使用的页面交换到磁盘上。
另一个解决方案可能是黑客入侵数据库,以便将页面锁定到内存中(我知道可以做到,但是现在我不能确切告诉您如何操作),但是无论如何,数据库很可能会使用它自己的交换和缓存机制。
要知道什么是交换以及虚拟内存是如何工作的...我建议您看一下一些操作系统讲座,也许MIT Open Courseware会有所帮助。
我找到了部分答案。交换内存是计算机硬盘上的空间,操作系统将使用该空间将RAM中实际存储的信息释放给其他应用程序。当系统需要用于新进程的内存而没有内存时,应该执行此操作,因此我们可以看到,如果我们的系统具有大量RAM,则可能不需要SWAP内存。
更新
要找出交换空间(或虚拟内存)的位置,可以转到任务管理器(CTRL + ALT + DEL),然后从“视图”->“列”->“虚拟内存”中打开。现在,只需计算内存使用量和虚拟内存之间的差异即可。另外,这里还提供了有关如何在运行Vista的情况下进行查看的说明:http : //www.ehow.com/how_5067693_increase-swap-space.html
交换是用作RAM的硬盘空间。(相对而言)它非常慢,但是当计算机尝试处理其RAM无法处理的更多数据时,它可以防止计算机崩溃。
要停止使用交换的进程-安装更多的RAM。
如果您不希望您的进程使用交换内存,则只需完全禁用交换内存。不幸的是,如果内存用完了,Linux内核将杀死一些正在运行的进程,以释放一些内存供使用。
如果您有足够的RAM用于系统,则实际上可以不使用交换内存。
我有一台不带交换内存的768Mb RAM的笔记本电脑。足以满足我的需求。我有一台具有256Mb RAM的服务器,并且不使用交换内存。它使用OpenVZ虚拟化运行8台虚拟服务器,也没有问题。
因此,是否需要交换内存取决于您。