Perl 如何在真实负载下将日志中的流量重放到web服务器的配置文件/基准web应用程序?

Perl 如何在真实负载下将日志中的流量重放到web服务器的配置文件/基准web应用程序?,perl,performance,web-applications,stress-testing,Perl,Performance,Web Applications,Stress Testing,是否有一种方法可以获取web服务器的真实网络流量(例如,从web服务器日志(Apache))并在真实负载下将此流量重放到概要web应用程序(Perl)中,或者在选择其中一种之前对不同实现的速度进行基准测试和比较 如果重要的话,webapp是用Perl编写的,并在普通CGI、FastCGI、mod_Perl(通过ModPerl::Registry)、PSGI(通过Plack::App::WrapCGI)下运行 交叉张贴到 关于服务器故障的类似问题: 对方给出了简短的回答 更详细的回答是您不能

是否有一种方法可以获取web服务器的真实网络流量(例如,从web服务器日志(Apache))并在真实负载下将此流量重放到概要web应用程序(Perl)中,或者在选择其中一种之前对不同实现的速度进行基准测试和比较

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

交叉张贴到


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


    • 对方给出了简短的回答


      更详细的回答是您不能:您将丢失请求头和帖子正文。

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


      一个问题:你想这样做是因为(1)你想模拟真实世界的流量分布在你的页面中吗?(2)有太多的页面,甚至考虑建立任何类型的测试脚本。

      < P>在谷歌上进行快速扫描,得到了一个有趣的博客条目,随后有有用的评论在。一位评论员还提到了允许实时录制会话的功能,并明确指出您应该能够将其回放。但是,这对现有的Apache访问日志没有太大帮助。

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


      最近来过这里。我想,如果我用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 -
      
      tcpdump-i eth1 dst-s 0-w-端口80|\
      tcprewrite--mtu trunc--infle=--outfile=-\
      --dstimap=:|\
      tcpslice-w---| tcpreplay--intf1=eth1-
      
      由于各种原因,它不起作用,所以我开始挖掘更多的内容,并找到了Gor:一个由Granify的Leonid Bugaev编写的小型Go项目,它正是为我们想要实现的目标而编写的

      这就是我们最终使用Gor的原因:

      我们也有厨师烹饪手册:


      希望这能有所帮助。

      对于我想要进行基准测试/评测的特定web应用程序,这无关紧要:它只使用GET请求,实际上与wrt没有区别。请求头(除了用作“text/html”和“application/xml+xhtml”)之外。问题不仅在于优化真实世界的流量,还在于真实流量会产生web应用程序感觉到的I/O压力(这是I/O,而不是CPU或内存或网络限制)。有主页,800+子页面,然后这些子页面有许多子页面。。。第一个链接给了我“找不到页面”,不幸的是在