JMeter, java.net.BindException: Address already in use: connect

JMeter를 이용해서 성능테스트를 수행하는 중 에러가 발생했다. (Windows 10, JMeter 5.5)

1
java.net.BindException: Address already in use: connect
cs


응? 서버 프로그램 돌릴 때 종종 보던 에러 아닌가? JMeter는 클라이언트인데, 왜 이런 에러가 나올까? BindException에 대해 알아보자.

Signals that an error occurred while attempting to bind a socket to a local address and port. Typically, the port is in use, or the requested local address could not be assigned.

출처: <https://docs.oracle.com/javase/8/docs/api/java/net/BindException.html>


아, 포트를 지정해야 하는 서버 프로그램에만 해당하는게 아니구나. 클라이언트 프로그램도 소켓을 이용하려면 로컬 주소와 포트에 바인딩을 해야 한다. 짧은 시간에 대량의 소켓을 바인딩하려면 운영체제에 설정된 수량만큼만 가능하다. 그 이상을 요구할 경우에 BindException이 발생한다. 

윈도우 10의 경우 기본값은 15,000개다. 그러므로 JMeter에서 15,000개 이상을 동시에 사용할 수는 없다. JMeter가 짧은 시간에 대량의 소켓을 생성하여 바인딩을 요청하는데 반해, 반납에는 그 이상의 시간이 걸려서 정체된 것으로 보인다. 

해결 방법은 레지스트리에서 MaxUserPort의 값을 늘리는 것이다. 65,534개까지 가능하다.


아래는 참고한 글이다. 덕분에 쉽게 해결했다. 

[JMeter] 최대 Test thread 수 늘리기 - java.net.BindException 오류 해결


댓글 쓰기

0 댓글