我需要比较每台运行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";
所以现在我有几个问题:
感谢名单..
答案 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和许多其他专业解决方案。
是我比较CPU性能的正确方法。 (PS我只能使用基于网络的基准测试)?
不,如上所述。
如何确定否。连接到我服务器的客户?
只有当您知道客户实际做了什么时,才会这样做。与每次请求运行复杂脚本的服务器相比,应该设置一个仅提供静态文件的服务器。
请提供更好的方法来查找cpu负载。 *很难绘制最大值。使用load_averages的cpu限制,可以通过读取/proc/loadavg.*来获得 在单独的过程中记录整体负载并记录它。把它放在测试日志旁边,你会看到影响。要创建此限制,PHP中唯一的方法是执行命令,解析反馈。提到上面关于nr的说明。您需要处理的CPU,核心等。这不仅仅是一个百分比。