![什么是过度交换](https://linux22.com/image/16309/%E4%BB%80%E4%B9%88%E6%98%AF%E8%BF%87%E5%BA%A6%E4%BA%A4%E6%8D%A2.png)
这个帖子让我问了这个问题。
缓存争用
在大型站点上,如果您使用 MyISAM,当添加节点或注释后强制清除缓存时,数据库表中会发生争用。由于需要删除数以万计的过滤文本片段,该表将被锁定很长一段时间,并且对其的任何访问都将排队等候清除其中的数据。页面缓存也是如此。
这通常会导致“站点挂起”一两分钟。在此期间,新请求不断堆积,如果您在 Apache 设置中没有正确设置 MaxClients 参数,系统可能会因过多的交换而陷入混乱。
答案1
当您运行的程序分配的内存多于计算机的物理 RAM 时,就会发生交换。一些数据被换出到磁盘,并在需要时换回。
只要这种情况不经常发生就可以。磁盘访问比 RAM 访问慢得多,因此每次计算机必须进行交换时,导致交换的程序都必须在数据传输时暂停。
当程序主动使用的内存量超过物理内存量时,就会发生过度交换(也称为抖动)。计算机将所有时间都花在磁盘和 RAM 之间交换数据上,而几乎没有时间真正完成任何工作。
在您提到的文章中,问题是分叉了太多 Apache 进程。每个进程都需要一些内存,如果 MaxClients 设置得太高,Apache 将不断分叉子进程,直到系统陷入瘫痪。