网站在巨大的流量PHP + MySQL下

时间:2013-11-22 09:15:15

标签: php mysql sql apache caching

让我说明我正在处理的问题:

  1. 由Apache 2.2 + PHP 5.x + MySQL 5.1.x提供支持的网站
  2. 峰值流量= 2.000个唯一身份访问者/分钟= 5-8k综合浏览量/分钟
  3. 正常流量=每天独立访客2.000

    • 网站在正常流量下运行良好
    • 网站在流量高峰时滞后
    • 我的服务器cpu负载相当大,但在高峰流量下(因为mysql / php进程),所以我的网站滞后。
  4. 正常状态:服务器响应0.1-0.4秒/网页浏览量。 PHP代码经过优化,可以在这段时间内从数据库中获取和处理所有数据并输出HTML代码(称之为服务器响应)。

    峰值流量状态:服务器响应2-5秒/网页浏览量。这比我满意的反应要长一点。我不希望我的访问者等待这么长的请求页面。

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

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

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

1 个答案:

答案 0 :(得分:0)

感谢您的所有时间和建议!

我一直在整个周末工作,测试和测试以及比较方法和解决方案。

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

  • 我还在使用Apache2.2,但即使使用nginx(感谢Bondye)也没有太大区别。
  • 我在debian wheezy尝试了LNMP,但与LAMP没有太大区别。
  • 对于静态文件,nginx实际上更快。
  • 使用PHP-FPM的Nginx速度提高了两倍,可以解决某些情况,但不能100%解决我的问题。

调整您的MySQL设置和MySQL查询

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

  • 但最重要的是优化查询以获得最佳效果。即使您的查询在使用mysql-cache方面表现最佳,更大的流量也会在大流量的几分钟内导致服务器停机。 你必须快速你的输出!!

收听apache

  • 调整你的apache mpm-prefork
  • 将KeepAliveTimeout减少到最多5秒(默认值= 30)
  • 将maxClients设置为正确的数字(取决于您在设置指令中的RAM,max-processes和max-servers)

最终结论

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

2)静态内容的nginx 您可以使用nginx在静态文件和内容中表现最佳,多个进程的CPU负载更低。

使用PHP-FPM,您的代码可以加速两次(可能更多)。但我不能将其视为最终解决方案。

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

这些步骤帮助我减少了使用全新服务器的CPU负载,加快了我的服务器响应速度,并在重大事件期间平衡了我的峰值流量。

希望有人会觉得有帮助。

相关问题