如何在实际负载下重播从日志到配置文件/基准测试Web应用程序的Web服务器流量?

时间:2010-11-07 15:10:55

标签: perl performance web-applications stress-testing

有没有办法让记录器真正的网络流量到网络服务器,例如从Web服务器日志(Apache),并将此流量重播到实际负载下的配置文件Web应用程序(在Perl中),或基准测试并在选择其中一个之前比较不同实现的速度?

如果重要,webapp是用Perl编写的,可以在普通的CGI,FastCGI,mod_perl(通过ModPerl :: Registry),PSGI(通过Plack :: App :: WrapCGI)下运行。

转发至Pro Webmasters


关于服务器故障的类似问题:

5 个答案:

答案 0 :(得分:3)

在Google上快速扫描这个产生了一个有趣的博客文章,后续有用的评论位于http://www.igvita.com/2008/09/30/load-testing-with-log-replay/。一位评论者还提到Tsung by Process-One允许实时录制会话,显而易见的是你应该能够重播它。但这对现有的Apache访问日志没有多大帮助。

答案 1 :(得分:2)

最近去过这里。我想如果我用tcpdump转储tcp流量,我可以重写包的目的地,然后重播到新的应用服务器。所以我开始用这样的东西:

tcpdump -i eth1 dst -s 0 -w - port 80 | \
tcprewrite --mtu-trunc --infile=- --outfile=- \
--dstipmap=<source_ip>:<destination_ip> | \
tcpslice -w - - | tcpreplay --intf1=eth1 -

由于各种原因它没有用,所以我开始挖掘更多并找到了Gor:来自Granify的Leonid Bugaev的一个小Go项目,写的正是我们想要在这里完成的。

这就是我们最终使用Gor的方式:http://devblog.springest.com/testing-big-infrastructure-changes-at-springest/

我们还有一本厨师食谱:https://github.com/Springest/gor-chef

希望这有帮助。

答案 2 :(得分:1)

其他方面给出了简短的回答。

更长的答案是你不能:你将缺少请求标题和POST正文。

答案 3 :(得分:1)

这是一种简单的perl方式来记录真实的HTTP流量并播放它:

http://patrick.net/sprocket/rwt.html

答案 4 :(得分:0)

如果只需要GET请求,并且没有通过查询参数实现会话跟踪,那么这是可能的。

一个问题:您是否希望这样做,因为(1)您希望模拟页面之间实际的流量分布,或者(2)有太多页面甚至不考虑构建任何类型的测试脚本?