据我所知,通常工作线程的数量应该等于服务器上的CPU数量(在我的例子中是8),除非线程正在进行某种I / O等。
我的网络服务器提供的服务需要在我的mysql数据库中进行大量搜索,在最坏的情况下,某些查询大约需要16秒。这里有两个问题, 1.如何确定最佳线程数? 2.如何模拟成千上万的用户并针对数千个请求测试我的服务器?
答案 0 :(得分:1)
与任何性能指标一样,性能测试确实无可替代。您可以考虑像n * number of CPUs
这样的理论度量,其中n
是一个小常数,但实际上没有任何替代经验验证。
答案 1 :(得分:1)
这取决于你对“线程”的定义。
如果你的线程“阻塞”......就像他们一次只处理一个客户端一样 - 8个线程将是一个糟糕的选择。如果你的工作线程都是非阻塞I / O,那么是的,将线程与cpu计数匹配将是一个不错的选择。
另一件需要考虑的事情是您的数据库调用是否是非阻塞的。我不确定你在使用什么语言编写脚本(或者你也是用C ++编写的?),但是例如,mysql的c版本会阻塞查询。
如果您正在寻找大规模的表现,我会看看NGiNX和G-WAN - 他们是这一领域的领导者。
此外,对于负载测试:http://httpd.apache.org/docs/2.0/programs/ab.html或http://www.hpl.hp.com/research/linux/httperf/
答案 2 :(得分:0)
补充说明:
由于Cores之间CPU缓存同步的成本,将HTTP工作线程限制为物理 CPU核心(忽略超线程)是有意义的。
此外,weighttp
(由Lighty团队制作的多线程客户端)比(单线程)ApacheBench
更具相关性来测试多核服务器:
您可以将AB
与weighttp
给出的结果与此公用域ab.c
wrapper进行比较,该公用域{{3}}已用于测试30多个Web服务器,缓存服务器和应用程序服务器
作为奖励,除了请求/秒之外,ab.c
还会收集RAM和CPU资源使用情况。