如何确定最大值没有。我的Web服务器可以处理的客户端?

时间:2012-02-02 17:52:16

标签: php

我需要比较每台运行Web服务器的3台不同计算机的性能。我的想法是,在每个服务器上处理相同的PHP脚本,能够服务最大的没有。在给定负载限制下的客户端将是最强大的客户端。

为了实现这一点,我有一个PHP脚本,它基本上做了一些繁重的数学计算。我维护客户端数量为静态值。脚本将无限运行,直到说cpu负载为95%。当负载达到95%时,脚本应该停止所有客户端。  在此限制下,拥有最多客户数的一个系统将是最佳表现者。

这个php脚本的一般结构如下:

static $clients_count=0;
static $sys_load=0;

//increment clients_count
$clients_count++;

while(sys_load<=95)
{
do_heavy_maths();

//calculate current cpu load 
sys_load=get_cpu_load();
}

echo "No. of max. clients this server handled: $clients_count";

所以现在我有几个问题:

  1. 是我比较CPU性能的正确方法。 (PS我必须使用基于网络 仅基准测试??
  2. 如何确定否。连接到我服务器的客户端?
  3. 请提供更好的方法来查找CPU负载。 (使用load_averages很难绘制最大cpu限制 可以通过从/ proc / loadavg读取来获得。
  4. 感谢名单..

2 个答案:

答案 0 :(得分:1)

尝试从内部执行此操作,不如运行外部基准测试工具准确。

请记住,php核心有几个可以避免CPU消耗或限制它的触发器。

使用操作码缓存,可以更快地运行,其他几个方面。

检查以下工具:http://www.opensourcetesting.org/performance.php

我坚信PHP不适合用原始内存/ cpu访问语言写一个更接近内存和cpu管理的C语言。

答案 1 :(得分:1)

认为尝试很好。听起来像一个有趣的项目。

不幸的是,这不是现实的负载测试。配置设置将严重影响单个脚本可以使用的容量。您只运行单线程,而Web服务器强烈依赖于多线程容量。其他影响,如主动负载,其他过程,分配等都会产生影响。甚至不考虑网络速度。

载荷通常表示为2.0之类的数字。这实际上没有说明负载,因为它取决于你真实容量的CPU核心数量。

对于真正的基准测试,请使用真实工具,例如:http://httpd.apache.org/docs/2.0/programs/ab.html和许多其他专业解决方案。

  1. 是我比较CPU性能的正确方法。 (PS我只能使用基于网络的基准测试)?
    不,如上所述。

  2. 如何确定否。连接到我服务器的客户?
    只有当您知道客户实际做了什么时,才会这样做。与每次请求运行复杂脚本的服务器相比,应该设置一个仅提供静态文件的服务器。

  3. 请提供更好的方法来查找cpu负载。 *很难绘制最大值。使用load_averages的cpu限制,可以通过读取/proc/loadavg.*来获得 在单独的过程中记录整体负载并记录它。把它放在测试日志旁边,你会看到影响。要创建此限制,PHP中唯一的方法是执行命令,解析反馈。提到上面关于nr的说明。您需要处理的CPU,核心等。这不仅仅是一个百分比。