网站下的巨大流量PHP+MySQL



让我展示一下我正在处理的问题:

  1. 网站由Apache 2.2+PHP 5.x+MySQL 5.1.x提供支持
  2. 峰值流量=2000名独立访客/分钟=5-8k页面浏览量/分钟
  3. 正常流量=每天2000名独立访客

    • 网站在正常流量下运行良好
    • 网站流量高峰时滞后
    • 我的服务器cpu负载在流量高峰时相当大(因为mysql/php进程),所以我的网站滞后了

正常状态:服务器响应时间为0.1-0.4秒/页。PHP代码经过优化,可以在这段时间内从数据库中获取和处理所有数据并输出HTML代码(称之为服务器响应)。

峰值流量状态:服务器在2-5秒/页面视图中的响应。这是一个比我满意的更长的回应。我不希望我的访问者等待请求的页面等那么久。

我现在正在做的事情:我处理这个问题的方法是本地缓存系统。我用缓存的SQL结果制作了大约10分钟的本地缓存文件(存储在磁盘上),所以我不必对每个请求调用相同的SQL查询。

我的网站是http://www.lechaton.cz/.

有没有更好的方法来处理峰值流量或优化CPU利用率?

感谢您的时间和建议

我整个周末都在工作,测试、测试、比较方法和解决方案。

Nginx解决方案(用LNMP代替LAMP)

  • 我仍然在使用Apache2.2,但即使使用nginx(感谢Bondye)也没有太大区别
  • 我试过用LNMP治疗debian喘息,但与LAMP没有太大区别
  • 对于静态文件,nginx实际上更快
  • 带有PHP-FPM的Nginx速度快了一倍,在某些情况下这可能是解决方案,但不能100%解决我的问题

调整MySQL设置和MySQL查询

  • 使用更好的缓存和缓冲来调整MySQL服务器。还要检查您的最大连接数和内存使用情况。

  • 但最重要的是优化查询以获得最佳性能。即使您的查询在mysql缓存中表现最好,更大的流量也会在几分钟内使您的服务器停机你必须缓存你的输出!!

调整apache

  • 调整您的apache mpm预处理
  • 将KeepAliveTimeout减少到最多5秒(默认值=30)
  • 将maxClients设置为正确的数量(取决于您的RAM、settings指令中的最大进程和最大服务器)

最终结论

1)内容缓存=规则#1我发现最好的解决方案是:缓存尽可能多的内容。若有显示缓存内容的选项,并没有理由让每个用户都生成相同的输出。它速度更快,节省了您的资源。

2)nginx用于静态内容你可以使用nginx在静态文件和内容方面表现最好,多个进程的cpu负载要低得多。

使用PHP-FPM,您的代码速度会提高两倍(也许会更高一点)。但我不能将其视为最终解决方案。

3)使用基准测试工具测试您的网站我使用过siege和apache基准测试(ab)以及mysqlslap。

这些步骤帮助我降低了全新服务器的CPU负载,加快了服务器响应速度,并在大型活动期间平衡了峰值流量。

希望有人会觉得它有帮助。

最新更新