我正在尝试使用JMeter来模拟一个应用程序错误,其中客户端应用程序在HTTP请求完成后不发送FIN请求。
有没有办法使用JMeter实现这一目标,还是有其他更简单的方法可以做到这一点?目标是测试服务器端修复,因此有必要模拟不按比例发送FIN。
编辑:更多说明......查看客户端数据包跟踪,每个HTTPS请求都会完成3路TCP握手。但是,客户端未发送FIN请求以关闭连接。结果是在服务器上可以看到许多未闭合的连接。我想使用JMeter或任何其他工具加载测试服务器端修复。有没有办法创建大量未关闭的连接?
答案 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