5

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

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

交叉发布给专业网站管理员


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

4

5 回答 5

3

对此在 Google 上进行的快速扫描产生了一个有趣的博客条目,随后的有用评论位于http://www.igvita.com/2008/09/30/load-testing-with-log-replay/。一位评论者还提到了 Process-One 的 Tsung,它允许实时录制会话,并明确指出您应该能够回放它。不过,这对现有的 Apache 访问日志没有多大帮助。

于 2010-11-08T17:20:00.067 回答
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

希望这可以帮助。

于 2013-11-13T11:22:34.760 回答
1

另一边给出了简短的回答。

更长的答案是您不能:您将丢失请求标头和 POST 正文。

于 2010-11-08T00:18:50.980 回答
1

这是一个简单的 perl 方法来记录真实的 http 流量并回放:

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

于 2013-01-09T01:10:45.273 回答
0

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

一个问题:您想这样做是因为(1)您想模拟页面之间的真实流量分布,还是(2)页面太多,甚至无法考虑构建任何类型的测试脚本?

于 2010-11-08T13:18:03.683 回答