以下摘录自这个帖子这让我想到了这个问题:
缓存争用
在大型网站上,如果您使用的是 MyISAM,则在添加节点或评论后强制清除缓存时,数据库表中会发生争用。由于需要删除数以万计的过滤文本片段,该表将被锁定很长一段时间,并且对该表的任何访问都将排队等待清除其中的数据。页面缓存也是如此。
这通常会导致“网站挂起”一两分钟。在此期间,新请求不断堆积,如果您没有正确设置 Apache 中的 MaxClients 参数,系统可能会因过度交换而陷入混乱。
答案1
我认为您需要问的是“什么是 thrashing”。
“过度交换” == “过多交换”,本身并没有多大意义。我想你已经知道了。
通常,现代操作系统都有这种“虚拟内存”系统,这意味着您可以定义比硬件实际物理内存(例如 RAM)更多的可访问内存。这通常是通过将虚拟内存的一部分放在主存储器(通常是 RAM)中,并将其余部分移到辅助存储器(通常是硬盘)来实现的。从辅助存储器加载到主存储器的过程称为“页面输入”。将内存从主存储器存储到辅助存储器的过程称为“页面输出”。
“页面调出”操作后跟“页面调入”操作,这被称为“交换”,通常用于推送虚拟内存管理器需要的那部分内存。想不再使用,则转移到二级存储,并从二级存储中拉取即将使用的内存部分。
从某种意义上说,RAM 是存储在辅助存储器中的虚拟内存的缓存。与所有缓存机制一样,这是一个命中/未命中的游戏。如果命中率高,性能就会好(对于好的虚拟内存管理器来说,通常都是这样)。如果未命中率高(命中率低),那就太糟糕了,性能甚至比辅助存储器的速度还要差。
系统抖动是指未命中率非常高的情况,这种情况经常发生:您最近刚刚调出的内容需要再次“调入”,这使得从内存中读取/写入的成本过高。如您所知,与 RAM 访问相比,硬盘读取/写入操作的成本非常高。
如果您有计算机科学背景,您可能知道,当您将输入按特定顺序排列时,快速排序的速度可能会很慢,即最坏情况序列。抖动就像您遇到最坏情况或接近最坏情况一样。大多数情况下,您会受到性能损失。
答案2
当您的进程需要的内存超过服务器上的 RAM 时,它们会将部分内存空间“交换”到磁盘上的交换分区中。访问此虚拟内存比访问实际 RAM 慢得多,因此如果到了必须交换频繁使用的数据的地步,就会削弱系统的性能。