Java 서블릿을 사용하여 작성된 웹 응용 프로그램이 있습니다. Tomcat 7을 서블릿 엔진으로 사용하고 있지만 이전에 Glassfish를 사용했으며 똑같은 문제가있었습니다.Java 웹 응용 프로그램이 느린 MySQL 쿼리에서 멈 춥니 다.
해당 페이지에 5 분마다 업데이트되는 "통계"섹션이 있습니다. 관련된 MySQL 테이블의 크기 때문에 통계 생성에 약 30 초가 걸립니다.
페이지가로드되면 캐시 된 통계를 표시합니다. 페이지의 모든 내용이 렌더링 된 후에는 출력 스트림을 플러시 한 다음 닫습니다. 그런 다음 통계를 업데이트합니다. 이렇게하면 페이지가 완전히로드 된 후 페이지가로드되고 통계가 업데이트되기까지 사용자가 30 초를 기다릴 필요가 없습니다.
문제는 쿼리를 실행하는 동안 페이지를 새로 고치면 쿼리가 완료 될 때까지 페이지가로드되지 않는다는 것입니다. 즉, 초기 사용자에게는 지연이 없음에도 불구하고 긴 지연.
왜 응용 프로그램이 실제로 정지 상태입니까? Tomcat은 하나의 스레드가 여전히 사용 중이더라도 요청을 처리하기 위해 다른 작업자 스레드를 사용할 수 없습니까?
감사합니다.
당신은 문제를 정말 잘 표현했습니다. 그러나 우리는 당신이 질의를 실행하는 방법을 여전히 알고 있어야합니다. 나는이 문제가 모두를 막고있는 동기화 된 방법에 있다고 생각한다. 코드 공유! –