我有 4 个 Web 服务器、2 个数据库服务器(读写)、Redis 和一个负载均衡器。我使用的是 PHP 7.0、Apache2 和 MySQL 5.7,但是当我对 3000 个同时上网的用户进行负载测试时,服务器会一个接一个地崩溃。
Apache 服务器非常强大,每个服务器都有 32GB 内存,遗憾的是所有服务器的内存使用量都达到了最大。
我们对代码做了很多修改,但是,我觉得不对劲,我的托管服务提供商无法帮助我进一步配置我的服务器,因为他们说这是他们能做的最好的事情,在这里我需要你的帮助 - 我们缺少什么?应该设置 PHP / Apache / MySQL 中的哪些配置?
我要澄清的是,该网站在有 300 个客户端的情况下运行良好,但随着越来越多的客户端访问,响应时间达到每个请求 50 秒,这真的很奇怪,为什么只有 400 个客户端就会让我的服务器响应如此缓慢?
我真的很绝望也很困惑,我们该看什么呢?
多谢。
答案1
去年夏天我们甚至有 6000 个请求。4 个带有负载均衡器的服务器如何处理这样的请求?
那么到底发生了什么变化?回答这个问题,几乎总是因为后端代码处理陷入困境,有时是因为 tcp 套接字耗尽之类的原因,有时只是 apache 和 php 之间的简单池/等限制。
请遵循以下步骤:
- 从堆栈中消除 PHP。仅为测试提供小型静态文件
- 观察结果并调整 apache/OS 以适应所需的连接
- 重新引入 PHP。服务器将无法匹配静态文件服务性能
- 分析您的 PHP 代码,识别并解决缓慢问题
- 最后:尽可能缓存所有 PHP 结果。
“如何得到不起眼的 php 应用程序满足X基准?" 是一个非常问题很广泛,但流程通常是,让前端静态服务满足您的要求,然后将后端代码添加到组合中。要么解决后端代码的缓慢问题,要么消除它。
一旦你开始达到数千同时用户..您将会遇到某些限制(文件系统速度、内存、CPU 速度、通信延迟、低效的 wordpress 代码和缓慢的数据库调用以及大量的 CPU 上下文切换),这些限制将会加剧并迅速导致服务质量呈指数级下降。