据我所知,我认为 apache web 服务器通过多处理和多线程的组合来处理多个请求。想知道对于运行 web 服务器的 php 应用程序来说,是否只有 apache 决定它可以处理的并发用户数,还是还取决于 php 应用程序。如果是,那么在多大程度上?
答案1
只有一种方法知道,通过真实负载测试。
基本上,您设置了多个客户端“basher”,这些客户端脚本被设计为像真实用户一样运行,但可以同时运行大量会话。执行此操作足够长的时间,测量负载(CPU、内存、网络、存储),查找出现故障的位置 - 通常有一个相当明显的负载点,超过该点,您就会开始出现截断会话、超时等 - 这就是您的服务器的限制。
您可以猜测并接近答案,但在您测试之前,这永远都只是猜测。
哦,顺便说一下,有很多外部公司专门为您提供测试。
答案2
http_load、siege、jmeter、ab 都是可以让你进行一些负载模拟的工具。但是,如果不编写一些复杂的脚本,你实际上无法很好地测试。虽然 Ian Bicking 更多地提到了这一点wsgi 测试,处理 webapps 时也会出现同样的问题。
当您进行基准测试时,您是否使用本地连接,其中每个测试都被视为快速客户端?他们是否在发帖、缓慢上传、访问您未预料到的页面、测试您的身份验证机制、丢失 cookie 等?
您的网络服务器是造成瓶颈的很大一部分原因,但是,您的应用程序代码、其编写方式、其与数据库的交互方式、数据库对查询、更新等的反应方式等都发挥着作用。当流量达到一定水平时,您在基准测试期间期望正常工作的东西会以奇怪而神秘的方式中断。将部分负载从应用程序服务器转移到静态内容服务器可以为您赢得更多时间。
您选择的 apache 处理模型也与很多事情有关。大多数人使用 Apache2-prefork 来处理 mod_php,但 apache2-mpm-worker/fcgid php 速度更快。将静态内容卸载到 Varnish 或 Nginx 也可以减轻应用服务器的部分负载,从而节省时间。
任何事情都会有影响。我见过的大多数 Web 应用性能问题都源于 SQL 后端使用不当或 Apache 中的配置错误。