如何跳过从JMeter发送FIN请求?

时间:2013-11-26 20:16:10

标签: java sockets http network-programming jmeter

我正在尝试使用JMeter来模拟一个应用程序错误,其中客户端应用程序在HTTP请求完成后不发送FIN请求。

有没有办法使用JMeter实现这一目标,还是有其他更简单的方法可以做到这一点?目标是测试服务器端修复,因此有必要模拟不按比例发送FIN。

编辑:更多说明......查看客户端数据包跟踪,每个HTTPS请求都会完成3路TCP握手。但是,客户端未发送FIN请求以关闭连接。结果是在服务器上可以看到许多未闭合的连接。我想使用JMeter或任何其他工具加载测试服务器端修复。有没有办法创建大量未关闭的连接?

2 个答案:

答案 0 :(得分:0)

我想你在TCP协议中引用了FIN消息。 每当连接关闭时,都会发送此TCP段。在JMeter中,它可能在从服务器接收到HTTP响应后关闭连接。如果您使用HTTP请求采样器,要保持连接打开,您必须选中“使用KeepAlive”复选框。

答案 1 :(得分:0)

@ user3038060需要的软件可以生成大量与服务器的TCP连接,然后忘记连接。因此,从操作系统的角度来看,从客户端PC到服务器的连接很多,但客户端应用程序对连接没有任何作用(neigther发送或接收)。

这是一个简单的perl程序,可以执行此操作(您需要安装perl)。只需将其复制到一个文件,比如conns.pl。

您可以将其作为

运行
perl conns.pl <num_of_connections> <serverIp>

例如:

perl conns.pl  10000 10.11.1.1

它将尝试与服务器10.11.1.1建立10,000个连接。您可以通过ctrl-C退出程序。

希望它有所帮助。

use IO::Socket;

my $sock;
my $host = $ARGV[1];
my $port = 80;
if (defined $ARGV[2]) {
    $port = $ARGV[2];
}

for ($i=0; $i<$ARGV[0]; $i++) {
  $sock = IO::Socket::INET->new( Proto    => 'tcp',
                                 PeerAddr => $host,
                                 PeerPort => $port,
                                 KeepAlive => 1
   ) || die "failed to setup outsock $@\n";
    print "created a connection $i\n";
}
<STDIN>; #wait for user to type ctrl-C