2013-11-26 1 views
0

HTTP 요청이 완료된 후 클라이언트 애플리케이션이 FIN 요청을 보내지 않는 애플리케이션 버그를 시뮬레이트하기 위해 JMeter를 사용하려고합니다.JMeter에서 FIN 요청을 보내는 것을 건너 뛰는 방법은 무엇입니까?

JMeter를 사용하여이를 수행 할 수있는 방법이 있습니까? 아니면 더 쉬운 방법이 있습니까? 목표는 서버 측 수정을 테스트하는 것이므로 규모에 따라 FIN을 보내지 않는 시뮬레이션이 필요합니다.

편집 : 더 많은 설명 ... 클라이언트 쪽 패킷 추적을 보면 모든 HTTPS 요청이 3 방향 TCP 핸드 셰이크를 완료합니다. 그러나 클라이언트는 FIN 요청을 보내 연결을 닫지 않습니다. 그 결과 서버에서 볼 수있는 많은 닫히지 않은 연결이 있습니다. JMeter 또는 다른 도구를 사용하여 서버 측 수정을 테스트하고 싶습니다. 닫히지 않은 연결을 매우 많이 생성하는 방법이 있습니까?

+0

먼저 문제를 해결해야합니까? HTTP 킵 얼라이브에서는 정상적인 동작입니다. 서버는 유휴 연결을 시간 종료합니다. – EJP

답변

0

TCP 프로토콜의 FIN 메시지를 참조한다고 가정합니다. 연결이 닫히면이 TCP 세그먼트가 전송됩니다. JMeter에서는 서버로부터 HTTP 응답을받은 후 연결을 닫는 중일 수 있습니다. HTTP 요청 샘플러를 사용하는 경우 연결을 열어 두려면 "KeepAlive 사용"확인란을 선택해야합니다.

+0

JMeter 문서에 따르면, Keep-Alive를 사용하면 헤더를 설정하고 닫기를 호출하지 않습니다. 그러나 이렇게하면 서버 측에 나타날 수있는 연결 수를 제한하는 부작용이 있습니다. – user3038060

+0

이상적으로 나는 HTTP 연결을 만든 다음 그것을 포기하는 방법을 찾고 있습니다. 이렇게하면 서버 측의 연결 수가 최대화되지만 부하 생성기에서 연결 수가 최소화됩니다. – user3038060

+0

@ user3038060 그건 이해가되지 않습니다. 여러 개의 JMeters를 실행하지 않는 한 서버의 연결 수와로드 생성기의 연결 수는 동일합니다. – EJP

0

@ user3038060에는 서버에 대한 TCP 연결을 많이 생성하고 연결을 잊어 버릴 수있는 소프트웨어가 필요합니다. 따라서 운영 체제의 관점에서 볼 때 클라이언트 PC에서 서버로의 연결은 많지만 클라이언트 응용 프로그램은 연결 (아무 것도 보내지도 수신도 안 함)과 관련하여 아무 것도하지 않습니다.

다음은이 작업을 수행 할 수있는 간단한 펄 프로그램입니다 (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 [email protected]\n"; 
    print "created a connection $i\n"; 
} 
<STDIN>; #wait for user to type ctrl-C 
관련 문제