以下摘自这篇文章引出了我的这个问题:
caching争用
在大型站点上,如果使用的是MyISAM,则在添加节点或注释后强制清除caching时,数据库表中会发生争用。 由于需要删除成千上万的filter文本片段,表格将被locking很长一段时间,并且任何对其的访问都将被排队,以等待清除其中的数据。 页面caching也是如此。
这通常会导致一两分钟的“网站挂起”。 在此期间,新的请求不断堆积,如果Apache设置中没有正确的MaxClients参数,系统可能会由于过度交换而进入抖动状态。
我认为你需要问的是“什么是颠簸”。
“过度交换”==“太多交换”本身并不是那么有意义。 我想你已经知道了。
通常现代操作系统都有这个“虚拟内存”系统,这意味着你可以定义可访问的内存,而不是硬件所具有的实际物理内存(例如RAM)。 这通常是通过在主存储器(通常是RAM)中只包含所有虚拟内存的一部分,然后将其余部分移动到辅助存储器(通常是硬盘)来实现的。 从二级到一级存储的加载过程称为“页面input”。 将存储器从主存储器存储到次存储器的过程称为“页面出”。
“页面input”操作之后是“页面input”操作,称为“交换”,通常是将虚拟内存pipe理器认为不再使用的内存部分推送到辅助存储器,并将内存部分从二级存储使用。
RAM是存储在辅助存储器中的虚拟内存的caching。 和所有的caching机制一样,这是一个关键的问题。 如果你的命中率是好的,性能会很好(对于一个优秀的虚拟内存pipe理者来说,情况通常是这样的)。 如果你的失误率很高(命中率低),太差了,性能甚至比二级存储的速度还要差。
抖动是丢失率非常高的情况,这种情况发生的很多:最近刚刚换出来的东西需要再次“翻页”,从内存读取/写入的成本太高。 如您所知,与RAM访问相比,硬盘读取/写入操作非常昂贵。
如果您来自计算机科学背景,可能您知道当您将input按特定顺序sorting时,快速sorting可能会很慢O(n ^ 2),即最差情况的顺序。 颠簸是像你有最糟糕的情况或接近最坏的情况。 大部分时间你会得到性能的惩罚。
当你的进程需要更多的内存,而不是你的服务器上有内存的时候,他们将一些内存空间“交换”到你的交换分区的磁盘上。 访问这个虚拟内存比访问真正的内存要慢很多,所以如果这个虚拟内存达到了经常使用的数据需要交换的地步,那么这个虚拟内存会削弱系统的性能。