使用JMeter在Windows + Apache + PHP线程安全上对PHP脚本进行负载测试


Load testing of PHP script on Windows + Apache + PHP thread safe with JMeter

我开发了一个web服务器的PHP脚本来检索平铺图像以覆盖地球表面,如World Wind。假设我有get_image.php,它返回image/jpegimage/png作为响应。

初始条件也是我有Windows Server 2003测试我的脚本和预装Apache 2.2.16线程模型。所以我必须安装线程安全的PHP 5.3使用它作为Apache的模块。

在脚本已经成功编写之后,我决定使用JMeter生成一个负载测试。从单个虚拟用户每不超过0.5秒执行一个请求开始,然后增加每分钟虚拟用户的数量,当有9个虚拟用户时,我得到一些未处理的请求,但在服务器的任务管理器中,我看到不超过8-10%的CPU。我获得的最大性能是每分钟1600-1700个成功响应(请求由8个虚拟用户产生)。

我不是系统管理员,也没有处理繁重性能的经验,所以我的问题是:这是这里讨论的PHP线程安全问题吗?我如何确定我所面临的问题?它是更好地尝试我的脚本CGI与IIS + FastCGI或我们必须看看基于linux的web服务器?

注:我还使用从http://downloads.php.net/pierre下载的memcached服务器和php_memcache.dll(所谓的线程安全版本)。这个模块不是Windows官方支持的,可能它不是真正的线程安全,所以它可能会对我的问题造成额外的影响,在描述的问题是PHP线程安全问题的情况下。

如果我是您,我会使用XDebug来跟踪应用程序的哪些部分占用了时间并导致请求失败。

既然你是在windows上(我猜),那么你可以使用一个叫做WinCacheGrind的方便的小程序来打开和检查输出文件。它将逐行或逐函数地向您显示应用程序中不同代码块运行所需的确切时间。

如果你发现在刷任务中没有什么令人惊讶的,那么就是时候开始关注环境了