2012-02-03 2 views
2

Tomcat 7에서 실행되는 다음과 같은 간단한 JSP가 있습니다. 컨테이너에없고 web.xml도 없습니다. 나는 나의 브라우저에서 3 개의 분리 된 탭 (크롬)으로 URL을 http://localhost:8090/test/test.jsp 번 연속으로 세 번 연속 누른다.Tomcat JSP가 병렬로 실행되는 대신 순차적으로 실행되는 것처럼 보입니다. 무엇이 누락 되었습니까?

`

<%@ page import="java.util.Date" %> 
<% 
    out.println("Hello there dude"); 
    System.out.println("Hello there my friend "+ new Date() +" 
       "+Thread.currentThread().getName()); 
    try { 
     Thread.sleep(5000); 
    } catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
%> 
내가 톰캣 7 톰캣의 다른 버전에서 실행할 때, JSP 서블릿 여러 요청을 차단하고 내가 콘솔에서 다음과 같은 출력을 얻을.

안녕 내 친구 목 2월 2일 산악 표준시 19시 31분 35초 2012 HTTP 바이오-8090-간부-1
안녕 내 친구 목 2월 2일 산악 표준시 19시 31분 40초 2012 HTTP 바이오-8090 이 간부-3
안녕 내 친구 목 2월 2일 산악 표준시 19시 31분 45초 2012 HTTP 바이오-8090-간부-4

당신이 시간을 살펴보면, 당신은 JSP 서블릿이 순차적으로 실행되어 표시됩니다. 나는 그것들을 모두 동시에 시작했기 때문에, 그들은 서로의 두 번째 시간 내에 끝내야한다고 믿지만, 이전 요청이 완료 될 때까지 후속 요청은 시작되지 않습니다. 위의 시작 시간이며 브라우저는 마지막 요청시 15 초 동안 중단됩니다. 단일 스레드 동작을 요구하지 않을 때 스펙을 이해하면 JSP 요청이 병렬로 실행되어야합니다.

흥미롭게도 Tomcat은 위에 표시된 것처럼 서로 다른 스레드를 할당하지만 실제로는 순차적으로 실행됩니다. 진행중인 요청이 완료 될 때까지 컨테이너가 새 JSP 서블릿 스레드를 릴리스하지 않을 것입니다. 우리는 하루 종일 Webservices를 실행하고 그들은 잘 병렬로 실행하는 것 같습니다.

저는 멀티 코어 Windows 상자에서 실행 중이며 사용 가능한 200 개의 스레드가있는 기본 Tomcat 구성을 사용하고 있습니다.

+1

일부 브라우저 (Chrome 및 Firefox를 테스트 한 적이 있음)에서 여러 탭에 대한 요청이 동일한 http 포트 요청을 사용하고 브라우저가 여러 요청을 보낼 수 없도록 차단되었습니다. 아이러니하게도, 나는 3 이하의 탭에 대해 ie9에서 이것을 보지 못했습니다. 따라서 브라우저가 사용자의 요청을 차단할 수 있으므로 결과가 실제로 클라이언트 인 경우 오류가있는 서버 동작을 믿을 수 있습니다. –

+0

가능한 [servlet multithreading] 중복 (http://stackoverflow.com/questions/7681291)/servlet-multithreading) 및 [Java Servlet 동시 요청] (http://stackoverflow.com/questions/8011138/java-servlet-concurrent-request) – BalusC

답변

2

실제로 이것은 Tomcat 블로킹 스레드가 아니라 요청을 차단하는 브라우저의 경우 일 가능성이 높습니다. 방금 Tomcat 7 설치시 동일한 코드를 시도하고 wget localhost:8060/ThreadTest/ &을 세 번 연속으로 실행했으며 세 개 모두가 서로 1 초 이내에 완료되었습니다.

관련 문제