【发布时间】:2012-02-03 02:27:58
【问题描述】:
我需要比较 3 台不同计算机的性能,每台计算机都运行一个 Web 服务器。我的想法是,在每台服务器上处理相同的 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";
所以现在我有几个问题:
- 是我比较 CPU 性能正确的方法。 (PS 我必须使用基于网络的 仅用于基准测试)?
- 如何确定编号。连接到我的服务器的客户端数?
- 请提供更好的方法来查找 CPU 负载。 (使用 load_averages 很难绘制最大 cpu 限制 可以从 /proc/loadavg 中读取)。
谢谢..
【问题讨论】:
-
您永远不会考虑 Web 服务器中允许的最大客户端(如 apache)
-
可能是这样。但我的问题不是关于 Web 服务器分解,而是关于 CPU 负载。我只想知道这个脚本可以并行运行多少次,直到负载达到 95%。当这种情况发生时,我会拒绝。的连接。如果我错了,请纠正我..
-
如果您的服务器在 CPU 负载达到 95% 之前可以处理 100 个连接,但您的 Web 服务器只允许最大 50 个并发连接怎么办? (那么你的测试永远不会有成果)
-
请记住,Web 应用程序中的大量负载是 IO。使用占用大量 CPU 的脚本进行测试可能无法代表实际性能。
-
我也不确定
static $clients_count = 0;,除非它只是其他共享数据方法的占位符。使用 prefork 时 PHP 中的静态变量如何表现? (我认为这是使用 PHP 设置 Apache 尤其是的推荐方法。)
标签: php