【问题标题】:How to determine the max. no. of clients that my web server can handle?如何确定最大值。不。我的 Web 服务器可以处理的客户端数量?
【发布时间】: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";

所以现在我有几个问题:

  1. 是我比较 CPU 性能正确的方法。 (PS 我必须使用基于网络的 仅用于基准测试)?
  2. 如何确定编号。连接到我的服务器的客户端数?
  3. 请提供更好的方法来查找 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


【解决方案1】:

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

请记住,php core 有几个触发器可以避免或限制 cpu 消耗。

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

查看一些工具:http://www.opensourcetesting.org/performance.php

我坚信 PHP 不适合在原始内存/cpu 访问语言上编写它,并且像 C 那样具有更紧密的内存和 cpu 管理。

【讨论】:

  • 我同意你的观点,但我无能为力。我需要编写一个基于 php 的基准测试工具。虽然我会编写这个工具的 C 版本,但到目前为止我必须只使用 php..thanx 无论如何..
【解决方案2】:

觉得尝试一下很不错。听起来是个有趣的项目。

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

负载通常以数字表示,例如 2.0。这实际上并没有说明负载,因为它取决于您的实际容量的 CPU 内核数量。

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

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

  2. 如何确定编号。连接到我的服务器的客户端数?
    只有在您知道客户实际在做什么的情况下才能做到这一点。与在每次请求时运行复杂脚本的服务器相比,只提供静态文件的服务器的设置应该完全不同。

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

【讨论】:

  • thanx alot Franken..great answer..我同意这个测试绝不可能是真的,正如你所提到的,但我的想法很简单,如果你必须使用单个 php 比较 3 个系统脚本你会怎么走?因此,我查看opensourcetesting.org/performance.php 以获取真实世界的度量工具。
猜你喜欢
  • 1970-01-01
  • 2014-05-19
  • 2010-11-18
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-30
相关资源
最近更新 更多