Python ApacheBench的替代方案,用于评测我的代码速度

Python ApacheBench的替代方案,用于评测我的代码速度,python,profiling,benchmarking,latency,apachebench,Python,Profiling,Benchmarking,Latency,Apachebench,我用ApacheBench做了一些实验来分析我的代码响应时间,但它并没有为我生成正确的数据类型。我希望这里的好人有想法 具体来说,我需要一个工具 通过网络进行HTTP请求(不需要做任何非常花哨的事情) 尽可能准确地记录响应时间(至少几毫秒) 将响应时间数据写入文件而无需进一步处理(或将其提供给我的代码,如果是库) 我知道ab-e,它将数据打印到文件中。问题是,这只打印分位数数据,这很有用,但不是我需要的。ab-g选项可以工作,只是它不打印亚秒级的数据,这意味着我没有所需的分辨率 我编写了几行

我用ApacheBench做了一些实验来分析我的代码响应时间,但它并没有为我生成正确的数据类型。我希望这里的好人有想法

具体来说,我需要一个工具

  • 通过网络进行HTTP请求(不需要做任何非常花哨的事情)
  • 尽可能准确地记录响应时间(至少几毫秒)
  • 将响应时间数据写入文件而无需进一步处理(或将其提供给我的代码,如果是库)
我知道
ab-e
,它将数据打印到文件中。问题是,这只打印分位数数据,这很有用,但不是我需要的。
ab-g
选项可以工作,只是它不打印亚秒级的数据,这意味着我没有所需的分辨率

我编写了几行Python来实现这一点,但是httplib效率非常低,因此结果毫无用处。一般来说,我需要比纯Python可能提供的精度更好的精度。如果有人对Python中可用的库有什么建议,我洗耳恭听

我需要高性能、可重复和可靠的东西

我知道我一半的回答都是“互联网延迟使得这种详细的测量毫无意义。”在我的特定用例中,这是不正确的。我需要高分辨率的时间细节。真正使用我的HPET硬件的东西会很棒


因为答案和观点的数量很少,所以我在这里悬赏。

我通过两种方式做到了这一点

“loadrunner”是一款很棒但相当昂贵的产品(我认为是HP最近推出的)


结合perl/php和Curl包。我发现curlapi在php中更易于使用。您可以很容易地启动自己的GET和PUT请求。我还建议使用Firefox和LiveHttpHeaders插件手动运行一些示例请求,以验证您所需http请求的确切格式。

非常方便。它有一个GUI,您可以从中设置请求和线程池,也可以从命令行运行。

如果您可以用Java编写代码,您可以查看以下各项的组合

缺点是你将不得不自己做更多的事情。但是,以这种方式为代价,您将获得无限的灵活性,并且可以说比GUI工具更精确,更不用说HTML解析、JavaScript执行等了


还有另一个名为的项目,它似乎是为类似的任务而设计的,但我没有任何经验。

一个很好的开源性能测试工具参考:


您将找到描述和“最受欢迎”列表

我使用脚本在同一个交换机上驱动10个框,通过“重放”请求到1台服务器来生成负载。我让我的web应用程序将响应时间(仅限于服务器)记录到我需要的粒度,但我不关心对客户端的响应时间。我不确定您是否愿意在计算中包括往返客户的行程,但如果您这样做了,编写代码应该不会太困难。然后,我用一个脚本处理我的日志,该脚本提取每个url的时间,并根据负载绘制散点图和趋势图

这满足了我的要求,即:

  • 对不同URL的调用的真实分布
  • 基于负载的性能趋势
  • 在同一机箱上运行其他密集操作不会影响web应用程序

我以shell脚本的形式编写了控制器,foreach服务器在后台启动了一个进程,在一个文件中循环所有URL,并对每个URL调用curl。我用Perl编写了日志处理器,因为当时我使用的是更多的Perl。

非常强大。

Loadrunner听起来像是一款很棒的软件。这肯定超出了我的预算(而且太夸张了——我在这里主要是做统计)。实际上,我只需要执行HEAD请求,但使用curl作为库的想法似乎不错。你知道curl是否可以被说服为保持活动会话计时吗?下面是curl(实际上是Python中的libcurl)提供了大量与我想要研究的要点直接相关的信息。我想为自己的问题构建自己的工具有时候确实是正确的答案。另外,libcurl比我自己编写的任何网络代码都要高效得多。这看起来确实是一个方便的工具。对于我在这里需要的东西,有点过分了,但我会在其他项目中记住这一点。有多精确?我对像这样的大型工具的担心是GUI和所有“其他东西”可能会给我的结果增加噪音(当然,我希望结果比大多数web基准测试工具设计提供的更精确)。关于精确性-使用ApacheBench(或任何您信任的工具)进行一次测试运行,使用JMeter进行另一次测试运行。如果您的服务器在性能方面是一致的,那么两次运行的结果应该很接近。通过这种方式,您可以确保是否存在任何GUI开销。@mindas我需要比这样的测试更高的精度。好吧,在这种情况下,您可能需要编辑您的问题,并解释为什么以及您需要什么精度(以及为什么您信任ApacheBench-如果您这样做)。是的。。。但我不需要HTML解析、javascript等。我只需要请求离开我的机器和返回HEAD请求开始所需的时间。JUnitPerf可能比我需要的级别高一点,但我会看看它。我看了一下研磨机。它似乎更接近我想要的,但仍然有一些效率低下的问题让我担心。例如,“HTTPClient将POST作为两个PDU发送……这是HTTPClient中HTTP/1.1管道的保守实现的结果。”我最终构建了一个自定义工具,使用Python和libcurl的组合进行测量。libcurl为每个部分提供了良好的分辨率计时测量