2010-12-22 5 views
0

우리는 완료하는 데 3 시간이 걸리는 쿼리가 있습니다. 이전에는 문제가되지 않았습니다. 이전에이 쿼리를 호출하는 코드는 weblogic에 배포되고 후자의 연결 풀 관리자를 사용합니다.천천히 실행되는 쿼리

프로세스가 많은 메모리를 차지하기 때문에이 코드를 추출하여 자체 힙 공간에서 실행하게했습니다. 쿼리 호출 요청은 jms를 통해 수행됩니다. 나는 또한 우리가 사용하고있는 연결 풀 관리자가 기본 설정 (최대 연결 = 8, 최소 연결 = 0)을 사용하는 dbcp임을 알아 냈습니다. jms 클라이언트는 다중 스레드입니다.

우리는 인터페이스 (TOAD)를 통해 쿼리를 실행했을 때 2 초 밖에 걸리지 않았으므로 여기에서 데이터베이스를 "비난하는"것을 배제했습니다.

나는 병 목을 찾기 위해 여기서 어떤 단계를 취할 수 있는지 궁금해하고있었습니다. 연결 수영장이있는 것 같습니까?

답변

3

VisualVM 또는 스레드 덤프와 같은 도구를 사용하여 스레드가 수행중인 작업을 확인해야합니다. IO 작업이 완료되기를 기다리는 중입니까? 필요 이상으로 오래 기다리는 동기화되지 않은 코드가 있습니까? 3 시간 (또는 3 시간) 제한 시간이 지나면 멈출 수있는 교착 상태일까요?

1

가장 기본적인 자바 성능 도구 인 쓰레드 덤프 (thread dumps)로 돌아가는 것이 좋습니다. 당신이 콘솔이있는 경우

  • 는, 사용 CTRL-휴식 (승리), 또는 CTRL- \ (* nix에서 스크립트)
  • jstack을
  • jconsole을하고 스레드 : 스레드 덤프를 얻을 수있는 방법이 많이 있습니다 탭 또는 사용 가능한 mbeans을 사용하여 덤프가 발생합니다.

프로그램의 기능을보십시오. 이것들을 주기적으로 가져 가라. Thread Dump Analyzer 또는 Samurai처럼 큰 스레드 덤프를 보는 데 도움이되는 도구가 있습니다.

jconsole 또는 Visual VM을 사용하여 대화식으로 볼 수도 있지만 원시 덤프를 읽을 수있는 잘 발달 된 재능이 여러분에게 도움이 될 것입니다.