문제

서버에 대한 테스트 프로그램을 작성하고 있습니다. 테스트 앱에서는 많은 수의 클라이언트를 서버에 연결하려고하지만 잠시 후에는 다음과 같은 모든 종류의 오류를 얻습니다.

Connection reset by peer: socket write error                   

또는

java.net.SocketException: Connection reset                     

또는

java.net.ConnectException: Connection refused: connect

서버에 연결하는 모든 클라이언트에 새 소켓을 사용합니다.

누군가이 이상한 행동에 대해 나를 깨달을 수 있습니까?

도움이 되었습니까?

해결책

불행히도 서버의 특성에 대한 세부 정보를 많이 제공하지 않았습니다. 일반적인 TCP 서버를 작성하고 있다고 생각합니다. 이 대답에서 나는 할 것이다 ~ 아니다 Java 특정 세부 사항에 대해 이야기하십시오.

짧은 조언은 다음과 같습니다. 클라이언트 연결간에 지연을 삽입하십시오. 그것 없이는 서버에 대한 DOS 공격을 적극적으로 시뮬레이션하고 있습니다.

더 긴은 아래를 참조하십시오.

일반적으로 TCP 서버는 1 만 생성합니다 청취 전화로 양말 (사랑스러운 C 인터페이스) int sockfd = socket(...) 기능 및 결과 전달 (sockfd 우리의 경우) bind() 그리고 listen() 기능. 이 준비 후 서버는 An을 호출합니다 accept() 서버가 파자마로 가파르게됩니다 (소켓이 차단으로 표시된 경우). 지구의 반대편에있는 클라이언트가 connect() 기능, 기능 accept() (서버 측면) OS 커널의 지원으로 생성됩니다. 연결된 소켓.

가능한 실제 수 보류중인 연결 그것을 보면 알 수 있습니다 listen() 기능. listen() a 백 로그 최대 연결 수를 정의하는 매개 변수 OS 커널 소켓에 대기해야합니다 (이것은 기본적으로 모든 연결의 합입니다. SYN_RCVD 그리고 ESTABLISHED 주). 역사적으로 권장 값입니다 백 로그 1980 년대에는 5 시대에 우리 시대에 비참한 5 가지가있었습니다. 예를 들어 freebsd 7.2에서 a 하드 제한 ~을 위한 백 로그 입력하여 추측 할 수 있습니다.

% sysctl kern.ipc.somaxconn
kern.ipc.somaxconn: 128

그리고 페도라 10 :

% cat /proc/sys/net/core/somaxconn
128

추신
내 끔찍한 영어에 대해 죄송합니다.

다른 팁

웹/앱 서버는 한 번에 한정된 양의 클라이언트 만 서비스 할 수 있습니다.

이 제한에 도달하면 연결 거부/재설정이 수신됩니다.

당신의 질문에 대한 답변을 바랍니다.

건배

OS와 웹 서버가 얼마나 빠르고 얼마나 빠르고 몇 개의 연결을 시작/수락 할 수 있는지 제한이 있습니다. 서버에서 성능 테스트를 수행하려면 Apache Jmeter가 이러한 제한에 대한 솔루션이 있으므로 시도하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top