2014-06-24 7 views
3

최근에 이러한 경고가 로그에서 발견되었습니다. 나는 스레딩이나 바람둥이 전문가가 아니다. 누구든지이 문제를 디버깅하는 방법에 대한 조언이 있습니까?AJP가 PageAccessSynchronizer 경고를 획득 할 수 없습니다.

우리는 tomcat 서버에서 wicket 응용 프로그램을 실행하고 있습니다. 다른 정보가 유용 할 경우 알려주십시오. 모든 도움을 미리 감사드립니다.

[Jun 24, 2014 11:28:40] WARN [org.apache.wicket.page.PageAccessSynchronizer] 
- Thread 'ajp- bio-8009-exec-26' failed to acquire lock to page with id '4', 
attempted for 1 minute out of allowed 1 minute. The thread that holds the 
lock has name 'ajp-bio-8009-exec-20'. 

[Jun 24, 2014 11:28:40] WARN [org.apache.wicket.page.PageAccessSynchronizer] 
- "ajp-bio-8009-exec-20" daemon prio=5 tid=40 state=RUNNABLE 
+0

일부 통찰력을 제공하는 kill -3을 사용하여 우분투에서 tomcat 스레드 로그를 덤프 할 수 있음을 발견했습니다. –

답변

1

매우 긴 데이터베이스 쿼리가있는 페이지에서 한 번 같은 문제가 발생했습니다. 쿼리가 길어서 해당 페이지의 1 분 이상로드 시간이 예상됩니다. 하지만 다른 페이지를 클릭하면 첫 번째 페이지 이후에 페이지가로드되고 1 분 내에로드가 시작되지 않으면 시간 초과됩니다. 여기에 내가 가진 것과 같은 오류가 있습니다.

긴 데이터베이스 쿼리 페이지의 지연로드를 사용하여이를 해결했습니다. AjaxLazyLoadPanel의 예는 here입니다.

getRequestCycleSettings().setTimeout(Duration.minutes(3)); 

이 여전히 처음의 두 번째 요청 대기를 만들 것입니다하지만 개찰구가 더 많은 시간을 제공 : 당신이 할 수있는

두 번째 것은 svenmeier 제안 등처럼 제한 시간을 증가시킬 것입니다.

+1

이것은 정확하게 일어난 일입니다. 쿼리가 실행되는 데 193 초가 걸렸습니다. 필자는 매우 비효율적 인 쿼리를 2 초 정도 다시 작성하여 문제를 해결했습니다. –

2

페이지가 처리되는 동안 Wicket은 추가 요청 대기 상태를 유지합니다. 이것들은 설정 가능한 IRequestCycleSettings # timeout()을 포기합니다.

페이지가 응답하는 데 너무 오래 걸리는 이유를 확인하십시오.