2009-06-15 2 views
1

CMT가있는 EJB RESTEasy 컨트롤러가 있습니다.RESTeasy 컨트롤러를 종료하고 MainFilter를 종료 할 때 큰 지연이 발생할 수 있습니다.

DB에서 일부 엔티티를 만드는 중요한 방법 중 하나는 단일 호출에서 정확하고 신속하게 작동합니다.

하지만 10 명의 사용자가 동시에 호출하려고하면 매우 느리게 작동합니다.

로그에서 시간을 추적했으며 단일 호출과 비교하여 가장 확장 된 장소는 입니다. RESTeasy 컨트롤러를 종료하고 MainFilter를 입력 할 때까지 지연됩니다.

따라서이 지연 시간은 단일 호출의 경우 0-1ms에서 8 초로 증가합니다. 동시 호출 10 개!

아이디어가 필요한 이유가 무엇이고 어떻게 속도를 높일 수 있습니까?

답변

0

즉각적인 반응은 데이터베이스 잠금 문제입니다. 제어 흐름이 트랜잭션 경계를 통과 할 때 지연이 발생하는지 확인할 수 있습니까? 일들이 멈출 때를보기 위해 print 서술문으로 코드를 흩 뜨리는 오래된 기술을 시도해보십시오.

+0

RESTeasy 빈을 종료 한 후 MainFilter에 들어가기 전에 로깅을 지정할 수있는 위치는 무엇입니까? – artemb

+0

데이터베이스 잠금 문제를 감지 할 수있는 도구가 있습니까? 트랜잭션이 커밋 된 후 지연이 발생하는지 확인하는 방법은 무엇입니까? 나는 그 문제에도 관심이있다. – artemb

+0

그것은 까다로운 문제이며 매우 데이터베이스에 의존합니다. 각 데이터베이스 작업의 전후에 sticking 로깅 문을 시도하고 각 클래스의 시작과 끝에서 시도하십시오. 한 구성 요소의 끝과 다른 구성 요소의 시작 사이에 지연이 발생하면 응용 프로그램 서버 내부에 문제가 발생하여 데이터베이스/트랜잭션 로깅이 발생할 가능성이 높아집니다. – skaffman

0

resteasy thread에 대한 잠금을 설정합니까? 데이터 베이스? 병목 현상이 어디인지 예측하는 것은 매우 어렵습니다.

0

위의 설명에 따르면 데이터베이스 잠금 문제 일 수있는 것처럼 들립니다. 당신이 말한 것에서, 컨트롤러와 컨트롤러를 호출하는 필터 사이의 "지연"이 발생합니다. 아마도 트랜잭션 커밋이 발생하는 곳입니다.

그러나 코드는 데이터베이스에 일부 엔티티를 생성하지만 코드에서 업데이트 또는 선택을 수행하는지는 말하지 않습니다. 인서트를하는 것만으로도 관련 업데이트 나 선택 (즉, 오라클에서 업데이트 선택)을하지 않는 한 일반적으로 대부분의 데이터베이스에서 잠금 문제가 발생하지 않습니다.

문제의 원인 일 수있는 업데이트 대상 키 또는 상위 레코드와 같은 리소스가 있는지 확인하고 확인하십시오.

또한 JDBC 설명서를 확인하십시오. 대부분의 JDBC 드라이버에는 데이터베이스에서 수행되는 작업을 볼 수있는 로깅 수준이 있습니다. 로그에 상당한 수의 로그가 생성 될 수 있지만 로그에 스레드 식별자가 포함되어 있으면 문제가 발생한 위치를 확인할 수 있어야합니다.

관련 문제