【发布时间】:2010-11-25 19:57:56
【问题描述】:
我目前正在编写一些 Ajax 繁重的代码,我想知道随着越来越多的用户(希望)开始使用我的 Web 应用程序,我的服务器将如何扩展。它目前仅在我的内部测试服务器上,我想知道如何模拟几十或几千个用户,以便我可以看到它如何处理更重的负载。它是用 PHP/MySQL 编写的,我真的不想找到数百台计算机来手动设置和测试 :) 在此先感谢,非常感谢任何建议或指导。
【问题讨论】:
标签: php scalability scaling
我目前正在编写一些 Ajax 繁重的代码,我想知道随着越来越多的用户(希望)开始使用我的 Web 应用程序,我的服务器将如何扩展。它目前仅在我的内部测试服务器上,我想知道如何模拟几十或几千个用户,以便我可以看到它如何处理更重的负载。它是用 PHP/MySQL 编写的,我真的不想找到数百台计算机来手动设置和测试 :) 在此先感谢,非常感谢任何建议或指导。
【问题讨论】:
标签: php scalability scaling
Apache 基准测试。它随 Apache Web 服务器一起提供。有点像这样:对于使用 10 个并发线程的 100 个请求,使用以下命令:
ab -n 100 -c 10 http://localhost/
用您的 AJAX 代码将调用的 url 替换 localhost url。输出将为您提供有关如何处理请求的良好报告。一些有趣的数字是:
Complete requests
Failed requests
Requests per second
【讨论】:
ab 一样,我一直在使用Tsung - tsung.erlang-projects.org,这是一个很棒的工具。
我所做的,这将给出一个非常粗略的想法,是编写一个可以创建数十或数百个线程的应用程序,并随机访问服务器数十次,每个用户都有唯一的用户。
所以,我有 100 个不同的测试用户,我会创建 100 个线程,然后随机地以随机的时间间隔继续执行一些操作。
这将告诉您是否有一些规模问题。
但最终你会遇到问题,因为你只有一个网络连接,所以这会限制一些速度,所以它并不完美。
您也可以使用junitperf 来帮助解决此问题,因为您可以查看每个测试是否需要很长时间才能响应。
最好的办法是参加这些测试,将它们放在尽可能多的机器上,并同时运行它们,让 10 台计算机每台伪装成 10 或 100 人比让一台计算机伪装成更有效成为这些人中的每一个。
您不希望网络服务器和测试在同一台计算机上,否则会严重影响结果,因为网络服务器将只获得一些 cpu 周期。
【讨论】:
鉴于这个问题,我会记录一个用户会话。然后编写重现该组调用的客户端代码。
另一个选择是使用 VMware。 (请注意,我是一名员工)只需创建一堆虚拟机并与每个虚拟机连接到您的站点。仍然意味着大量的手动工作,但至少您不需要那么多机器来进行测试。
【讨论】:
我推荐LoadUI http://www.loadui.org/
【讨论】: