如何防止网站首次加载启动缓慢?

cis*_*eat 1 performance lamp web-server cache

我相信您已经注意到,对于许多服务器来说,如果您是几个小时的第一个访问者,则网站加载时间会很长。您知道为什么会这样吗(它只是服务器缓存吗?)以及如何使网站即使对于第一个访问者也能快速访问?在这种情况下,让我们采用正常的 LAMP 设置。谢谢你的帮助!

cec*_*rik 8

有很多潜在的原因。几乎可以肯定,原因不止一个。

几种可能:

  • 该网站在一些池化机制下运行,如 FastCGI、mod_php/mod_perl/mod_python 等。如果这些或 Apache 未配置为保持最小服务器池,则当新请求到达时,它们将不得不重新启动应用程序,并且有该应用程序已加载没有可用的服务器。
  • 应用程序使用数据库连接池。和上面一样的问题,只是需要重新建立数据库连接。一些关系数据库在打开新连接时可能会很慢(大量开销)
  • 沿途的各种缓存机制(对于运行负载平衡器或缓存之类的 memcached 的高性能站点)可能需要直接从站点刷新它们的信息,如果它们拥有的信息是陈旧的。也可以应用于浏览器的本地缓存:虽然它通常可以忽略网站上的所有其他静态文件,如 css、js、图像,但一旦这些文件从缓存中过期,它就需要重新获取它们。
  • 站点可能有维护活动,例如在负载低且站点未被访问时进行的备份。
  • 甚至可能与服务器的操作系统磁盘缓存一样低级,它的缓存可能已被同一台服务器上的其他站点填满,推出了一段时间未访问的站点的缓存版本(这正是磁盘缓存应该做的,缓存经常使用的文件,而不是不经常使用的文件)。这应该导致的延迟很可能非常小并且不会被人类察觉。

缓解策略当然取决于实际原因是什么。但是通常应该做的一些事情:

  • 确保 Apache 的 MinSpareServers/MinSpareThreads 和其他性能设置配置正确。尝试了解 Apache 产生更多服务器/线程的方式、时间和原因。
  • 确保任何应用程序服务器(如 FastCGI)也已正确配置以保持足够的可用池。
  • 正确配置数据库连接池或保持持久的数据库连接始终打开。
  • 确保所有包含的文件(css、js 等)都可以缓存并具有合理的到期时间。