2013-09-24 2 views
0

Tomcat 서버에서 struts2 프로젝트를 개발 중입니다.클라이언트에서 많은 요청을 수락하는 방법

클라이언트에서 내 서버 API로 6000 요청을 게시하려고합니다. 내 서버 API는 2000 개가 넘는 요청 만 허용합니다. 기타 4000 개가 실패했습니다.

java.net.ConnectException: Connection refused 

내 server.xml을 가지고 설정 :

내가 클라이언트에서 다음과 같은 메시지를 받았습니다

<Connector port="8080" protocol="HTTP/1.1" 
      connectionTimeout="1000000" maxThreads="50000" keepAliveTimeout="3200000"  minSpareThreads="10000" acceptCount="13000" maxIdleTime="1000000" 
      redirectPort="8443" /> 

중 하나가 내 서버 API가 모든 클라이언트 요청을 얻을 수 있도록하는 솔루션이 있습니까?

도와주세요! 감사합니다.

+0

어떤 버전의 tomcat을 사용하십니까? 당신의 PATH에 tcnative dll이 있습니까? – greyfairer

+0

한 번에 6000 번 연결하려고합니까 (즉, 동시에 6000 번 연결을 만들려고합니까?) 또는 6000 번 한 번 연결을 시도합니까? –

답변

2

이렇게하면 문제가 발생할지 모르겠지만 설정 값이 너무 높습니다.

  • maxThreads = 50000은 모든 스레드가 사용될 때 15GB 이상의 메모리 (win32)를 의미합니다!
  • minSpareThreads = 10000은 시작 (win32)시 약 3GB의 메모리 소비를 의미합니다!
  • keepAliveTimeout = 3200000은 클라이언트가 사용하지 않거나 닫지 않은 경우> 53 시간 동안 연결이 열려 있음을 의미합니다!
  • maxIdleTime = 1000000은 사용되지 않는 스레드가 파괴되기 전에 최대 16 시간 동안 계속 존재 함을 의미합니다!
+1

Tomcat7 이후에는 acceptCount도 있습니다. 이것은 연결을 허용하지만 스레드가 사용 가능해질 때까지 대기합니다. 따라서 스레드를 예를 들어로 줄이면됩니다. 100, 여전히 6000 개의 연결을 허용합니다. – greyfairer

0

이것은 서버의 오류 로그를 조사 할 때 볼 수있는 서버의 일부 오류 때문일 수 있습니다.

간단한 이유 중 하나는 데이터베이스 일 수 있습니다. 스레드 당 하나의 데이터베이스 트랜잭션을 만드는 경우 6000 동시 트랜잭션을 허용하도록 연결 풀 (및 데이터베이스 자체)을 구성해야합니다.

관련 문제